在mergetool期间如何选择整个REMOTE文件?

时间:2019-03-30 08:12:04

标签: git vim merge vimdiff mergetool

我使用的是CLI合并工具vimdiff,而不是逐行浏览并为每次更改键入:diffg RE以选择REMOTE版本,有没有办法我可以拥有REMOTE版本整个文件作为目标合并?

3 个答案:

答案 0 :(得分:2)

(CLI替代)

我知道它并不能真正回答您的问题,但是如果您需要从一侧获取所有内容以合并中的特定冲突文件,您不会甚至需要一个工具。

您可以签出所需的文件版本(检查文档herethere),然后add来解决冲突:

git checkout --ours path/to/file
# or
git checkout --theirs path/to/file

# and then to conclude the resolution
git add path/to/file

请注意,如果您对此举感到遗憾,也可以使用

将其带回带有冲突标记的未合并状态
git checkout -m path/to/file

答案 1 :(得分:1)

简短答案:

使用:%diffget获取所有块。


说明:

与大多数vim命令一样,

diffget接受一个范围。引用vimhelp:

                                                        :diffg :diffget
:[range]diffg[et] [bufspec]
                Modify the current buffer to undo difference with another
                buffer.  [...]
                See below for [range].

[...]

When no [range] is given, the diff at the cursor position or just above it is
affected.  When [range] is used, Vim tries to only put or get the specified
lines.

%替换为当前文件名(请参见:help c_%)。 如果指定范围,则表示将使用所有行。

答案 2 :(得分:1)

在mergetool中,如果您有两个以上的缓冲区,则不能使用:diffget,因为Vim不知道从哪个文件获取差异。

但是,当解决冲突时(需要运行mergetool),Git创建了一些文件来管理冲突:

Unmerged paths:
  (use "git reset HEAD <file>..." to unstage)
  (use "git add <file>..." to mark resolution)

    both modified:   my/conflicting/file.py

Untracked files:
  (use "git add <file>..." to include in what will be committed)

    .env
    my/conflicting/file.py.orig
    my/conflicting/file_BACKUP_5038.py
    my/conflicting/file_BASE_5038.py
    my/conflicting/file_LOCAL_5038.py
    my/conflicting/file_REMOTE_5038.py

它们代表冲突的不同方面:

  • BACKUP是带有冲突标记的文件副本,
  • 本地是冲突发生前的当前状态,
  • BASE包含本地文件与被合并文件(或在进行rebase,cherry-pick或stash pop / apply的情况下应用)之间的共同祖先提交时文件的状态,
  • REMOTE是尝试应用的提交<---这是您要使用的版本

因此,您可以做的是将_REMOTE_文件复制为当前文件(cp path/to/file_REMOTE_* path/to/file),或者在mergetool中,复制_REMOTE_:%y)的内容,然后用它替换文件的内容(ggVGp,移至顶部,进入可视行模式,移至末尾,粘贴)。