GIT 使用经验(3) ---分支间的操作 (续)


Git处理分枝和合并是非常独到的。无论是创建新分枝还是分枝之间切换,都表现出一个共同的特征--快!Git 鼓励在工作流程中频繁使用分支与合并,哪怕一天之内进行许多次都没有关系.下面就详解一下Git的合并与撤销

 


 

Git合并

 

比如现在项目提交了几次更新,在C2通过主分支创建了2个不同的分支做不同的任务


GIT 使用经验(3) ---分支间的操作 (续)

 
等任务做完需要merge到master时就可以切换到master分支下分别merge iss01和iss02分支。首先merger iss01时,会看到Fast Forward的提示,因为C3是C2的直接上游,所以Git只需把 master 分支指针直接右移。此次合并不会产生任何的冲突。如下图。

GIT 使用经验(3) ---分支间的操作 (续)
 
然后在用master合并iss02,会看到Merge made by recursive.,Git会合并C3,C4并对合并后的结果重新做一个新的快照,并自动创建一个指向它的提交对象C5如下图



GIT 使用经验(3) ---分支间的操作 (续)
 
有时候合并操作并不会如此顺利。在进行如上操作的过程中,如果iss01和iss02修改到了同一个文件的相同代码时,就会出现冲突,遇到此问题时我们可以用小乌龟自带的冲突工具解决。如下图




 

如果在分支iss01提交的时候它的直接祖先C2也进行了修改,如下图。这时候在用C6合并C4也是可以的,Git会自己裁决哪个共同祖先才是最佳合并基础,所以此特性让Git的合并操作比其他系统都要简单不少。

GIT 使用经验(3) ---分支间的操作 (续)
 

 

Git撤销

 

如果文件已经修改,但是还没有commit,我们可以用小乌龟的revert命令进行撤销。
如果文件已经commit,可以使用git reset --hard HEAD~1撤销上一次提交。~<index>代表撤销前几次的提交.
此命令回退一次commit,在回退到的commit之后的所有修改都被丢弃,所以要慎重使用。
也可以使用git reset --soft HEAD~1撤销上一次提交,它和hard的区别是,同样取消一次commit,但是所有的修改都保留。此方法用来修改commit的message非常方便。
git-revert HEAD~1      一般是按照某一次的commit完全反向的进行一次commit,他的效果和git-reset --hard HEAD~1 && git-commit -a -m 'revert commit <commitid> xxx....' 完全一样。

 

reset命令只是相当于在本地进行一次还原操作,如果想让别的分支知道你的撤销动作,请使用revert命令,它是完全反向的进行一次commit。


你可能感兴趣的:(git)