【发布时间】:2019-08-21 02:33:01
【问题描述】:
我正在使用 CLI 合并工具 vimdiff,而不是逐行输入 :diffg RE 以选择远程版本,有没有一种方法可以让整个文件的远程版本作为目标合并?
【问题讨论】:
-
Git 允许您指定合并策略(我们的,他们的),但这些会影响整个合并。小心
标签: git vim merge vimdiff mergetool
我正在使用 CLI 合并工具 vimdiff,而不是逐行输入 :diffg RE 以选择远程版本,有没有一种方法可以让整个文件的远程版本作为目标合并?
【问题讨论】:
标签: git vim merge vimdiff mergetool
(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
【讨论】:
使用:%diffget 获取所有块。
diffget 像大多数 vim 命令一样采用一个范围。引用 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.
% 用作范围时“等于 1,$(整个文件)”,请参阅 :help :%。
【讨论】:
在 mergetool 中,如果你有超过 2 个缓冲区,则不能使用 :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,到顶部,进入视线模式,到最后,粘贴)。
【讨论】: