7

默认情况下,如果您在与 git 冲突的文件缓冲区上使用fugitive.vim :Gdiff您将获得三向差异显示HEAD,工作副本(带有冲突标记)和merge.

我喜欢git config merge.conflictstyle diff3设置,其中包括基础HEAD(冲突标记和merge冲突标记的最近共同祖先。

不幸的是,即使diff3conflictstylefugitive.vim 中,你仍然只能得到 3 个窗格(没有基础)。

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

Tim Pope 的这条评论似乎提供了一些线索,但我不太明白。

4

4 回答 4

5

您可以通过以下步骤进行操作:

  • :split- 做一个水平分割
  • :Gdiff- 顶部窗口中的差异
  • ctrlw+ j- 将焦点移到底部窗口
  • Gedit :1- 在底部窗口中加载祖先

Gedit :2加载头部并Gedit :3加载合并

于 2014-04-08T14:20:30.177 回答
5

我知道的最快的方法是这个命令,在冲突的缓冲区中发出:

:Gsdiff :1 | Gvdiff

您必须将这些命令作为一行输入,当您将它们作为两个单独的命令输入时,效果会有所不同。

结果如下所示:

+---------------------------------------+
|         common ancestor (:1)          |
+-----------+--------------+------------+
|           |              |            |
| HEAD (:2) | working copy | merge (:3) |
|           |              |            |
+-----------+--------------+------------+

括号内的东西是 fugitive.vim 在这种情况下理解的“修订”说明符。有关:h fugitive-revision更多信息,请参阅。

于 2014-09-23T19:36:39.097 回答
0

你可以使用 git mergetool -t gvimdiff。它将在 gvimdiff 中打开 4 个窗口。它没有内置在逃犯中,但是您仍然可以使用 vim 进行 3 路合并。

于 2013-03-16T03:27:27.833 回答
0

如果您只想打开已在 vim 缓冲区中打开的文件的差异,这些答案都很棒。我更喜欢使用git mergetool并打开一个 4-way diff 视图,如下所示:

+-----------+----------------------+------------+
|           |                      |            |
| 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

希望这对其他人有用。

于 2018-06-15T21:10:38.587 回答