git与github(结合clion操作)
对自己学习git的一个记录,由于刚开始接触git,所以没有对于git做深入解释和说明,仅供参考,如有理解不对的地方或者需要改进的地方敬请指出。
用到的git命令:
- git init //初始化
- git add . //添加所有文件
- git add 文件名 //添加指定文件
- git commit -m " " //提交,引号里写提交说明
- 本地和github仓库关联
git branch -M main
git remote add origin https://github.com/flyfirehong/git_Example.git //后面的https输你自己仓库的
git push -u origin main
- git log //查看当前分支下的提交记录
- git checkout 分支名 //切换分支
- git reset 提交的id号 //回退提交
- git stash save “” //引号里放对于此次暂存的说明,通常git reset后对于未
被git管理的进行处理 - git stash list //查看暂存的记录
1 本地的修改与提交
1.mkdir在当前文件夹下新建一个目录,ls查看
2.cd进入到目录下,用git init使得目录下的内容全部交由git托管
3.个人目前常用编辑器为clion,因此这里用clion打开git_Example项目,新建一个hello.cpp的文件,可以看到文件的显示目前是红色的,就是没有被管理的文件
4.要让它被管理可以用add操作
5.此时文件的颜色就变成了绿色,表示该文件已经交由git管理
6.原本新建的文件是空的,现在我们要对文件进行修改,比如输出一个hello world,修改完成之后,点右上角的绿色对勾进行提交(相当于存档),这个时后左下角会出现一个修正的区域,这个地方可以写对于本次提交的说明
可以查看我们的提交记录,并且提交后的文件名会看到变成了白色的
之后我们再新建立的文件也是同样的操作,用编辑器的操作比较简单,在命令行中也可以完成相同的操作,命令如下:
//比如当前新建了一个main.cpp,但是未添加也未提交
git add main.cpp
//git add . 这个添加所有文件
git commit -m "引号里填你的提交说明" //提交
2 github的操作
1.github上新建一个空仓库,使用三条命令进行关联和推送
git branch -M main
git remote add origin https://github.com/flyfirehong/git_Example.git //后面的https输你自己仓库的
git push -u origin main
刷新自己的仓库就可以看到这样
3分支操作
1.创建分支
可以通过IDE来直接新建一个分支,或者用git checkout -b 分支名
这样的命令行操作来切换到一个新的分支上,这里新建一个dreamer分支并切过去
2.分支合并的冲突和解决(merge)
现在已经在我们的dreamer分支上了,对之前的helo.cpp进行修改,添加一行输出并提交,这个时候如果切换回main分支上依旧只能看到第一次提交的记录
但是我们考虑到多人协作的时候,可能还有别的人在主分支上也对hello.cpp进行了修改,我们右键切换回main分支,并在分支中对hello.cpp进行修改和提交,这里也可以在命令行用git checkout main切换
这个时候就出现了两个分支修改了相同文件的相同位置,合并就会,产生冲突,接下来用命令行进行演示,git log可以查看当前分支下的提交记录,每一次的提交记录还可以显示这次提交的id,这个id在合并的时候要用。用git checkout dreamer切换到dreamer分支上,git log查看提交记录并把最后一次提交的id号复制下来,再git checkout main到main分支,在这里git merge id号进行合并。这个时候可以看到它提示了合并冲突conflict,需要我们解决冲突
与此同时还可以看到IDE中出现了这样的显示,head处提示了主分支中的内容,=====下面提示了要合并分支的内容,这个时候就需要我们决定两个修改里面到底要保留谁,当然也可以都保留,手动合并就是选择我们要保留的代码,然后再把>>>>>, ======, <<<<<<这些提示行给去掉。最后重新git add 和 git commit就行了
在解决冲突之后就是这个样子了,并且不会再显示分支合并中了
3. 合并回退
有的时候在处理冲突完成后发现我们的处理方式不太合理,这个时候需要回退到之前合并前的节点,就是main分支上进行第二次提交那里。首先git log找到我们要回退的那个节点的id号(这里提示一下要按q进行退出查看),然后git reset 节点id,对于git reset的参数:
- Mixed 默认参数,将一些文件的变更放入到暂存区
- Soft 将文件变更放到工作区
- hard 什么都不会存
如果想要git reset但是工作区有一些东西还没有提交,那么就可以用git stash save来做暂存,就是不管里面有什么修改,但是暂时不需要用到,之后可以用git stash list来查看我们暂存的东西。
这个时候已经回退成功了,同时在IDE里可以看到提交记录也发生了变化,退回到了之前的状态
然后再切到dreamer分支上,如果提示有东西没有保存就再用git stash save来存一下,切到dreamer分支后,这回用IDE也可以进行回退,在我们想要回退过去的节点那里右键进行回退
4.rebase合并
我其实还没咋用过这个,这个合并操作方式和merge的操作感觉没啥区别,两种合并的区别就是merge回产生一个合并节点,rebase就没有而且也不像merge那样可以清楚的看到分支的流动过程,所以用的还是merge合并多,其他的区别暂时还不太清楚,这里也就不再演示了。
5.一些无关紧要的东西
在IDE中用git的方式简单的多,比如上边栏的git中也有合并的选项,就不需要在命令行中敲,那么为什么还要演示命令行操作呢,emmm,我想可能是因为黑格尔说过存在即为合理,学都学了,就还是一并记录吧
6.git reflag
查看到所有历史版本信息。根据对应的id号实现我们想要的reset回退
7.多次提交合并到一次提交
这个本质上就是git reset然后再对未管理的文件进行重新提交,比如我们想把2-6次的提交压缩成一次,那么我们就回退到第一次提交,这个时候可以看到2-6次提交的文件都变成了红色,就是未被git管理的文件,这个时候就添加再提交,就变成了一次提交,完成了一个压缩提交的过程