我在git merge的时候遇到了冲突,怎么解决?

大家好 , 今天来和大家聊一个老生常谈的问题 , 我们在使用git merge的时候遇到了冲突 , 怎么办?
首先我们来看看为什么会冲突 , git冲突的原因很简单 , 就是两个分支当中对同一处代码进行了不同的改动 。 于是git会困惑 , 不知道在merge的时候究竟应该怎么做 , 于是就会出现冲突 。
实战光说不练没有意义 , 让我们来实际操作一下 。
我们首先创建一个一个test.txt文件 , 在其中写入一行test 。 git add并且git commit 。
我在git merge的时候遇到了冲突,怎么解决?文章插图
接着我们checkout -b创建一个新的分支 , 在这个分支当中我们把test.txt之前的一行改成get conflict 。 然后我们同样add commit 。
我在git merge的时候遇到了冲突,怎么解决?文章插图
最后 , 我们回到master分支 , 尝试merge test_conf分支 。 merge了之后 , 会看到这样的结果:
我在git merge的时候遇到了冲突,怎么解决?文章插图
输出的log当中提示我们有两个文件出现了冲突 , 这个第八篇.md就是当前编辑的文章 , 由于我们一直实时在写 , 所以也会产生冲突 。 但是文章里的冲突看起来不方便 , 所以我们就不展示相关的冲突了 。 我们重点来看test.txt这个文件 , 也就是我们刚才创建的演示文件 。
我在git merge的时候遇到了冲突,怎么解决?文章插图
会发现原本我们test.txt只有一行 , 现在多出了好几行 。 这个是git在merge的时候处理冲突的方法 , 它把两边的冲突都保留了下来 。 用>>>>>>和=======以及<<<<<<<<这样的符号进行分隔 , 我们简单介绍一下其中的含义 。
其实还是挺明显的 , 这个<<<<<<<< HEAD后面跟着的内容是HEAD指针指向的节点的代码 , 也就是我们当前所处的分支master分支当中冲突的代码 , 这些代码的内容一直到========结束 。 从=========开始一直到最后>>>>>>> test_conf是我们合并进来的分支的代码 。
【我在git merge的时候遇到了冲突,怎么解决?】除了直接打开文件之外 , 我们还可以运行git diff命令来查看冲突 。
我在git merge的时候遇到了冲突,怎么解决?文章插图
解决冲突手动解决查看完了冲突之后当然是解决冲突 , 最简单的方法将去做手动合并 。 手动合并的方法很简单 , 就是我们选择我们要保留的代码 , 然后再把>>>>>, ======, <<<<<<这些提示行给去掉 。 最后重新add commit 。
放弃合并这样当然可以完成合并 , 但是显然并不友好 , 如果改动量小还行 , 如果改动量很大的话 , 那么显然是非常费劲的 。 如果你觉得改动量太大想要先放弃合并 , 先想想其他的办法 , 可以使用git merge --abort命令 , 这样可以让你的代码恢复到合并之前的状态 。 如果你运行了git merge之后又进行了一些人为的改动 , 那么在abort之后 , 也会被回滚掉 。
git merge --abortmergetool除了手动合并以及放弃之外 , 我们还有一些其他的合并工具 。 比如git官方也开发了一个专门用来合并的工具 , 叫做git merge tool , 它会将找到一份两个分支的祖先代码作为base也就是基准 , 然后再将两个分支的改动都列举出来作为对比 , 让我们在git编辑器当中决定要留下什么 。
它打开大概是这样的 , 我个人只用过一次 , 因为觉得太难用了 。
git mergetool
我在git merge的时候遇到了冲突,怎么解决?文章插图
IDE工具除了git官方之外 , 一般的IDE当中也都会提供merge的工具 。 比如vscode当中的git插件为我们提供了非常好用的merge功能 , 它会用不同的颜色高亮不同分支的代码 。 并且还提供了几个非常好用的功能 。 分别是保留当前分支的代码 , 保留合并分支的代码 , 以及保留两者和对比改动 。
我们用vscode打开test.txt之后会看到:
我在git merge的时候遇到了冲突,怎么解决?文章插图
当我点击compare changes之后 , 它就会把这两个文件排列在一起给我们观察它们各自的改动 , 不得不说是非常好用了 。
我在git merge的时候遇到了冲突,怎么解决?文章插图
当然其他的IDE当中也有类似的工具 , 我个人觉得有这些工具就足够了 , git merge还有一些其他的参数用法 , 以及一些复杂的情况 , 我们先放放如果后面遇到再来分享 。
今天的文章就到这里 , 衷心祝愿大家每天都有所收获 。 如果还喜欢今天的内容的话 , 请来一个三连支持吧~(点赞、关注、转发)