在fugitive.vim冲突差异中显示基础

时间:2012-10-01 22:44:46

标签: git vim git-merge vim-fugitive

默认情况下,如果您在与git冲突的文件缓冲区上使用fugitive.vim:Gdiff,则会显示three way diff HEAD,即工作副本(使用冲突标记)和merge

我希望设置git config merge.conflictstyle diff3includes the base(冲突标记中HEADmerge的最新共同祖先。

不幸的是,即使diff3作为fugitive.vim中的conflictstyle,您仍然只能获得3个窗格(没有基础)。

有谁知道如何在另一个窗格中显示它?理想情况下是关于工作副本。

蒂姆·波普的

This comment似乎提供了一些线索,但我无法弄明白。

4 个答案:

答案 0 :(得分:4)

您可以按照以下步骤执行此操作:

  • :split - 进行横向拆分
  • :Gdiff - 顶部窗口中的差异
  • ctrl w + j - 将焦点移至底部窗口
  • 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

希望这对其他人有用。