我使用的是CLI合并工具vimdiff
,而不是逐行浏览并为每次更改键入:diffg RE
以选择REMOTE版本,有没有办法我可以拥有REMOTE版本整个文件作为目标合并?
答案 0 :(得分:2)
(CLI替代)
我知道它并不能真正回答您的问题,但是如果您需要从一侧获取所有内容以合并中的特定冲突文件,您不会甚至需要一个工具。
您可以签出所需的文件版本(检查文档here和there),然后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
获取所有块。
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
它们代表冲突的不同方面:
因此,您可以做的是将_REMOTE_
文件复制为当前文件(cp path/to/file_REMOTE_* path/to/file
),或者在mergetool中,复制_REMOTE_
(:%y
)的内容,然后用它替换文件的内容(ggVGp
,移至顶部,进入可视行模式,移至末尾,粘贴)。