默认情况下,如果您在与git冲突的文件缓冲区上使用fugitive.vim的:Gdiff
,则会显示three way diff HEAD
,即工作副本(使用冲突标记)和merge
。
我希望设置git config merge.conflictstyle diff3
,includes the base(冲突标记中HEAD
和merge
的最新共同祖先。
不幸的是,即使diff3
作为fugitive.vim中的conflictstyle
,您仍然只能获得3个窗格(没有基础)。
有谁知道如何在另一个窗格中显示它?理想情况下是关于工作副本。
蒂姆·波普的This comment似乎提供了一些线索,但我无法弄明白。
答案 0 :(得分:4)
您可以按照以下步骤执行此操作:
:split
- 进行横向拆分:Gdiff
- 顶部窗口中的差异Gedit :1
- 在底部窗口中加载祖先 Gedit :2
加载head并Gedit :3
加载合并
答案 1 :(得分:4)
我所知道的最快的方法是在冲突的缓冲区中发出此命令:
:Gsdiff :1 | Gvdiff
您必须将这些命令作为一行输入,当您将它们作为两个单独的命令输入时效果会有所不同。
结果如下:
+---------------------------------------+
| common ancestor (:1) |
+-----------+--------------+------------+
| | | |
| HEAD (:2) | working copy | merge (:3) |
| | | |
+-----------+--------------+------------+
括号内的内容是'修订版' fugitive.vim在这种情况下理解的说明符。有关详细信息,请参阅:h fugitive-revision
。
答案 2 :(得分:0)
您可以使用git mergetool -t gvimdiff。它将在gvimdiff打开4个窗口。它不是为逃犯而构建的,但你仍然可以使用vim进行3向合并。
答案 3 :(得分:0)
如果您只想打开已在vim缓冲区中打开的文件的差异,这些答案都很棒。我更喜欢使用git mergetool
并打开一个4向差异视图,如下所示:
+-----------+----------------------+------------+
| | | |
| HEAD (:2) | common ancestor (:1) | merge (:3) |
| | | |
+-----------+----------------------+------------+
| working copy |
+-----------------------------------------------+
感谢此处的其他答案,我能够通过创建名为diff.vim
的文件并将其放在我的~/.vim
目录中来完成这项工作:
Gsdiff :1
exe 1 . "wincmd w"
Gvdiff!
call feedkeys(winnr()."\<C-W>jgg", 'n')
然后,只需让mergetool命令执行vim -f "$MERGED" -S "$HOME/.vim/diff.vim"
即可。我的~/.gitconfig
有以下内容:
[mergetool "fugitive"]
cmd = vim -f "$MERGED" -S "$HOME/.vim/diff.vim"
[merge]
tool = fugitive
希望这对其他人有用。