git冲突的解决与版本回退遇到的问题

这里有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就行了。 

原文地址:https://www.cnblogs.com/wwzyy/p/12286338.html