如何解决我的Git仓库中的合并冲突?
试试:
git mergetool
它会打开一个GUI,逐步引导你解决每个冲突,并让你选择如何合并。有时候需要手动编辑一下,但通常它自己就够了。当然,它肯定比手工操作要好得多。
根据Josh Glover的评论:
这个命令不一定会自动打开一个GUI,除非你安装了某个工具。在我的情况下,运行
git mergetool
后使用了vimdiff
。你可以安装以下工具之一来使用它:meld
、opendiff
、kdiff3
、tkdiff
、xxdiff
、tortoisemerge
、gvimdiff
、diffuse
、ecmerge
、p4merge
、araxis
、vimdiff
、emerge
。
下面是一个使用vimdiff
解决合并冲突的示例程序,基于这个链接。
- 在终端中运行以下命令
git config merge.tool vimdiff
git config merge.conflictstyle diff3
git config mergetool.prompt false
这将把vimdiff
设置为默认的合并工具。
2. 在终端中运行以下命令
git mergetool
- 你会看到一个以下列格式显示的
vimdiff
:
╔═══════╦══════╦════════╗
║ ║ ║ ║
║ LOCAL ║ BASE ║ REMOTE ║
║ ║ ║ ║
╠═══════╩══════╩════════╣
║ ║
║ MERGED ║
║ ║
╚═══════════════════════╝
这些视图是:
- LOCAL: 这是来自当前分支的文件
- BASE: 共同祖先,这个文件在两个更改之前看起来是什么样子的
- REMOTE: 你正在将其合并到你的分支中的文件
- MERGED: 合并结果;这是保存在合并提交中并在将来使用的。
你可以使用ctrl
+w
在这些视图之间导航。你可以直接通过按ctrl
+w
,然后按j
键来访问MERGED视图。
有关vimdiff
导航的更多信息,请参阅这里和这里。
4. 你可以像这样编辑MERGED视图:
-
如果你想获取来自REMOTE的更改
:diffg RE
-
如果你想获取来自BASE的更改
:diffg BA
-
如果你想获取来自LOCAL的更改
:diffg LO
- 保存、退出、提交和清理
:wqa
保存并退出vi编辑器
git commit -m "message"
git clean
删除额外的文件(例如*.orig
)。 警告: 它将所有未跟踪的文件都删除,如果你不传递任何参数的话。