如何解决Git中的合并冲突?
尝试一下。git mergetool。
git mergetool
它打开一个GUI,让你浏览每个冲突,你可以选择如何合并。 有时它需要在事后进行一些手工编辑,但通常它本身就足够了。 这当然比手工操作要好得多。
根据@JoshGlover的评论。
该命令不一定会打开GUI,除非你安装了一个。我运行git mergetool的结果是使用vimdiff。你可以安装以下工具来代替它。meld、opendiff、kdiff3、tkdiff、xxdiff、tortoisemerge、gvimdiff、diffuse、ecmerge、p4merge、araxis、vimdiff、emerge。
vimdiff
meld
opendiff
kdiff3
tkdiff
xxdiff
tortoisemerge
gvimdiff
diffuse
ecmerge
p4merge
araxis
emerge
下面是使用vimdiff解决合并冲突的示例程序。基于此链接
第1步。在你的终端运行以下命令
git config merge.tool vimdiff git config merge.conflictstyle diff3 git config mergetool.prompt false
这将设置vimdiff为默认的合并工具。
第2步。在终端运行以下命令
第3步:你会看到如下格式的vimdiff显示
╔═══════╦══════╦════════╗ ║ ║ ║ ║ ║ LOCAL ║ BASE ║ REMOTE ║ ║ ║ ║ ║ ╠═══════╩══════╩════════╣ ║ ║ ║ MERGED ║ ║ ║ ╚═══════════════════════╝
这4个视图是
LOCAL - 这是当前分支的文件
BASE - 共同的祖先,文件在两次修改之前的样子
REMOTE - 你要合并到你的分支的文件
MERGED - 合并的结果,这就是被保存在repo中的内容。
你可以使用ctrl+w在这些视图中导航。你可以用ctrl+w接着用j直接到达MERGED视图。
关于vimdiff导航的更多信息这里 和这里 。
第4步。你可以通过以下方式编辑MERGED视图
如果你想从REMOTE获取变化
:diffg RE
如果您想从BASE获取更改
:diffg BA
如果您想获得来自LOCAL的更改
:diffg LO
第5步。保存、退出、提交和清理
:wqa保存并退出vi
:wqa
git commit -m "message"。
git commit -m "message"
git clean 删除由diff工具创建的额外文件(例如*.orig)。
git clean
1.识别哪些文件是冲突的(Git应该会告诉你)。
1.打开每个文件并检查差异;Git 会将它们划分开来。 希望能明显看出每个区块的哪个版本应该保留。 你可能需要与提交代码的同事讨论。
1.一旦你解决了一个文件中的冲突,git add the_file。
git add the_file
1.一旦你解决了所有**的冲突,请执行git rebase --continue或其他命令。 当你完成时,Git说要做。
git rebase --continue
如果你经常做一些小的提交,那么可以先用git log --merge看一下提交注释。然后git diff会显示冲突。
git log --merge
git diff
对于涉及到几行以上的冲突,用外部GUI工具更容易看到发生了什么。我喜欢opendiff -- Git也支持vimdiff、gvimdiff、kdiff3、tkdiff、meld、xxdiff,emerge开箱即用,你也可以安装其他工具。git config merge.tool "your.tool"会设置你选择的工具,然后git mergetool在合并失败后会显示上下文中的差异。
git config merge.tool "your.tool"
每次你编辑一个文件以解决冲突,git add filename将更新索引,你的diff将不再显示它。当所有的冲突都处理完毕,并且它们的文件都被git added了,git commit将完成你的合并。
git add filename
git add
git commit
尝试一下。
git mergetool
。它打开一个GUI,让你浏览每个冲突,你可以选择如何合并。 有时它需要在事后进行一些手工编辑,但通常它本身就足够了。 这当然比手工操作要好得多。
根据@JoshGlover的评论。
该命令不一定会打开GUI,除非你安装了一个。我运行
git mergetool
的结果是使用vimdiff
。你可以安装以下工具来代替它。meld
、opendiff
、kdiff3
、tkdiff
、xxdiff
、tortoisemerge
、gvimdiff
、diffuse
、ecmerge
、p4merge
、araxis
、vimdiff
、emerge
。下面是使用
vimdiff
解决合并冲突的示例程序。基于此链接第1步。在你的终端运行以下命令
这将设置vimdiff为默认的合并工具。
第2步。在终端运行以下命令
第3步:你会看到如下格式的vimdiff显示
这4个视图是
你可以使用ctrl+w在这些视图中导航。你可以用ctrl+w接着用j直接到达MERGED视图。
关于vimdiff导航的更多信息这里 和这里 。
第4步。你可以通过以下方式编辑MERGED视图
如果你想从REMOTE获取变化
如果您想从BASE获取更改
如果您想获得来自LOCAL的更改
第5步。保存、退出、提交和清理
:wqa
保存并退出vigit commit -m "message"
。git clean
删除由diff工具创建的额外文件(例如*.orig)。1.识别哪些文件是冲突的(Git应该会告诉你)。
1.打开每个文件并检查差异;Git 会将它们划分开来。 希望能明显看出每个区块的哪个版本应该保留。 你可能需要与提交代码的同事讨论。
1.一旦你解决了一个文件中的冲突,
git add the_file
。1.一旦你解决了所有**的冲突,请执行
git rebase --continue
或其他命令。 当你完成时,Git说要做。如果你经常做一些小的提交,那么可以先用
git log --merge
看一下提交注释。然后git diff
会显示冲突。对于涉及到几行以上的冲突,用外部GUI工具更容易看到发生了什么。我喜欢opendiff -- Git也支持vimdiff、gvimdiff、kdiff3、tkdiff、meld、xxdiff,emerge开箱即用,你也可以安装其他工具。
git config merge.tool "your.tool"
会设置你选择的工具,然后git mergetool
在合并失败后会显示上下文中的差异。每次你编辑一个文件以解决冲突,
git add filename
将更新索引,你的diff将不再显示它。当所有的冲突都处理完毕,并且它们的文件都被git add
ed了,git commit
将完成你的合并。