当Git中存在合并冲突时,会向冲突的文件中插入以下类似的内容。以下是三个问题:
- 如何阅读这些注释?
- 修复这些合并冲突时有哪些策略可以使用?
- 是否有适用于Mac的GUI工具,可以读取这些文件并显示两个版本以便更容易地解决问题?
注意:如果相关的话,我正在使用GitHub的Mac GUI客户端。
当Git中存在合并冲突时,会向冲突的文件中插入以下类似的内容。以下是三个问题:
注意:如果相关的话,我正在使用GitHub的Mac GUI客户端。
<<<<<<
和======
之间的内容来自于 HEAD
版本,它是合并操作 ( git merge
) 开始前提交的状态。应该等同于您的工作目录,因为如果树处于脏状态,则git merge
会报错。
在======
和>>>>>>
之间的部分来自正在合并的版本。在>>>>>>
之后的文本是引入冲突更改的提交评论。
冲突标记意味着此文件部分的基础版本不同于“新”版本。基础版本(最后的共同祖先)未显示。
如果您希望进行更舒适的合并,并且有GUI可用,请查看kdiff3。
现在有比试图阅读Git插入到您的文件中的无意义标记更好的解决方案。Black Pixel发布的第二个版本差异工具Kaleidoscope 2,现在也成为了合并工具。它不是免费的,但功能非常出色。
安装完Kaleidoscope 2后,将其与Git集成非常简单。打开Kaleidoscope,从菜单栏中选择Kaleidoscope > Integration…
然后你会看到这个窗口。只需从左侧导航中选择Git,然后安装ksdiff
命令行工具,接着把Kaleidoscope设置为Git的默认差异和合并工具。
最后,在Git中出现合并冲突时,只需转到命令行并执行git mergetool
。现在冲突很容易阅读。享受吧。
git config --global merge.tool opendiff
,另请参见 https://dev59.com/L2Yr5IYBdhLWcg3wYZSD#25625663
编辑:或者只需查看下面 ;) - LarS<<<< HEAD #Where the conflict starts
#Previous Revision
========== # The point where things look iffy
#Things that changed
>>>>> New Commit # Point where the conflict ends
Mac的Xcode自带FileMerge,可以通过命令行访问opendiff
。
git mergetool -t opendiff
git mergetool
命令 - 如果您已安装预定义工具或已配置其他工具,则会打开该工具以进行解决http://schacon.github.com/git/git-mergetool.html。=====
和>>>>>
的部分是冲突部分即可。当你有两个分支对同一个文件进行更改并尝试合并它们时,会发生合并冲突。要查看冲突文件的列表,请在终端上运行git status
。
文件中的冲突行将用可视指示器标记:
<<<<<
- 冲突从此行开始。
=====
- 将HEAD和merging_branch的更改分开。
>>>>>
- 冲突行的结束。
<<<<<<< HEAD
conflicted text from HEAD
=======
conflicted text from merging_branch
>>>>>>> merging_branch
当你解决了冲突文件并准备合并时,你只需要运行git add
和git commit
来生成合并提交。一旦提交完成,使用git push
将更改推送到分支。
参考文章:Git 合并。