这里有2个分支,master中的test.txt文件内容是master init,branch01中的test.txt文件内容是branch01 init。
1、合并分支遇到冲突
在master上merge branch01,由于master的第一行是master init,branch01的第一行是branch01 init,所以合并时就出现冲突了。
解决方法:修改冲突的test.txt文件,然后git add, git commit, git push
查看提交后的结果,会看到把branch01所有提交的版本都合并到了master上了,解决冲突后的test.txt文件也是对的。
2、版本回退(git reset)遇到的问题
输入git log,如下图所示,head表示最新版本。
现在把分支回退到合并前,也就是回退到master init提交的版本,如下图所示,输入git reset --hard [commit-id],可以看到当前版本已经回退到了master init提交到那个版本,之前合并到版本已经没有了
现在把当前本地分支同步到远程,如下图所示,使用git push出现推送失败的情况,因为本地分支的版本低于远程分支,当然会这样,我们本来就行回退到之前的分支。注意这里不要使用git pull来更新分支,更新后又是回退前的版本了。使用git push -f强制推送过去,就可以了。强制推送的情况在这里可以使用,一般情况下不推荐使用。
我们再次查看远程分支,如下图所示,推送版本只有master init,之前合并后的版本没有了
3、版本回退后,再重新合并
如下图所示,使用git merge,若出现冲突就解决,然后git add, git commit, git push就可以了。
可以看到,合并后的分支已经提交上去了
4、版本重做(git revert)
与git reset的区别是:git reset会回退到指定的某一版本,这个版本之后的提交都没有了;而git revert会生成一个新的版本,只不过这个版本会撤销指定的某一版本。
如下图所示,这里有3次提交,每次提交增加一行代码。
现在重做update 03这个版本,也就是撤销update 03这个版本的提交,并重新生成一个版本。如下图所示,输入git revert -n [commit-id]
结果如下所示,新增了一个版本,这个版本撤销了udate 03的提交
5、版本重做后再次合并
若重做了合并某分支的提交,重新生成了一个新版本,这个版本的代码不含这个分支提交的内容。当需要再次合并这个分支时,会出现已经合并的提示,原因是之前已经合并过了,再次合并肯定会给这个提示,合并不成功。但最新代码确实是没有这个分支的内容,因为已经重做了。
解决方法:先让这个分支撤销(git reset head^)上次的提交,如果合并前有多个提交就都撤销。然后git add, git commit, git push [-f]重新提交,然后切换到master,重新merge,push就行了。