我只是合并一个分支到我的主人在Git中,我得到了Automatic merge failed; fix conflicts and then commit the result.
Automatic merge failed; fix conflicts and then commit the result.
现在我跑git mergetool
和Vimdiff可以与下面的图片打开。 我不知道怎么用Vimdiff。 什么是每个小组在这里的意思是,我应该如何着手解决合并冲突?
Answer 1:
所有四个缓冲器提供相同文件的不同的看法。 左上角的缓冲(本地)是在文件中你的目标分支的样子(要合并到了什么)。 右上方的缓冲(远程)是在文件中的源科的样子(你在哪里合并)。 中间缓冲(BASE)是两个(这样你可以比较如何左右版本的相互分歧)的共同祖先。
我可能是错了以下观点。 我认为合并冲突的根源是这两个文件已经改变,因为基础文件的相同部分; LOCAL改变了报价从双单和远程取得了同样的变化,还从颜色到URL变化的背景值。 (我想合并是不是足够聪明,所有的切换到本地也存在于远程,它只是知道,因为在那遥远的具有相同的地方BASE地方进行了更改)。
在任何情况下,底部缓冲区包含实际上你可以编辑,该文件一个坐在你的工作目录。 你可以让你喜欢的任何变化; vim
正显示出你从每个的顶视图,它们是自动合并无法不处理方面的不同之处。 如果你不希望远程变化拉从局部变化。 如果你喜欢那些与本地更改拉离REMOTE变化。 如果你认为远程和本地是错误的,从底向后拉。 做一些事情,如果你有更好的想法完全不一样! 最后,你在这里做的变化是将实际犯下的那些。
Answer 2:
@ chepner的答案是伟大的,我想补充的“我应该如何着手解决合并冲突”的问题的一部分,一些细节。 如果你研究如何在这种情况下,实际使用vimdiff同时,它低于。
首先,要解决“放弃一切”选项-如果你不想用“vimdiff”同样,想中止合并:按Esc键 ,然后输入:qa!
并按下回车键 。 (见如何退出Vim编辑器? )。 Git会询问你合并完成后,请回复n
。
如果你想用Vimdiff,这里有一些有用的快捷键。 这是假设你知道的Vim(导航和插入/普通模式)的基础:
- 导航至底部缓冲液(合并结果):CTRL-w j 的
- 导航到与J / K下的diff; 或者,更好的,使用c 和 c键分别导航到下一个和前一个差异
- 使用Z ^ O的同时对折打开它,如果你想看到更多的上下文
- 每个差异,按照@ chepner的回答,您可以从本地,远程或基本版本获取代码,或编辑和重做,你认为合适
- 从本地的版本得到它,使用
:diffget LO
- 从远程:
:diffget RE
- 从基地:
:diffget BA
- 或者,如果你想编辑代码自己,得到本地/远程/基础版本,然后再转到插入模式和编辑休息
- 从本地的版本得到它,使用
- 一旦完成后,保存合并结果,并退出所有窗口
:wqa
- 通常情况下,git的检测合并制成,并创建合并提交
你可以在网上搜索其他方面Vimdiff快捷方式。 我发现这个有用: https://gist.github.com/hyamamoto/7783966