我正在做一个导致合并冲突的樱桃选择,当我解决它时,默认的合并工具 Vimdiff 被打开。有 4 个窗格,顶部是 Local 、 base 和 remote。但是我注意到基础没有我希望看到的文件版本是否在本地和远程提交之间进行了 git merge-base 。这是 git/vimdiff 中的缺陷吗?我如何才能看到基本窗格中显示了哪个提交?
1 回答
vimdiff 不知道合并基础提交哈希 ID;Git 不会告诉 vimdiff 它是什么。事实上,哈希 ID 在任何地方都不可见: Git 将其保密。
但是,您的问题文本正文是这样开始的:
我在摘樱桃
因此您可以轻松找到基于合并的提交哈希 ID:它是您正在挑选的提交的父级。
这是 git/vimdiff 中的缺陷吗?
我想,这有点见仁见智。(我有点希望 Git 留下一个MERGE_BASE_HEAD
文件或类似的东西——vimdiff 本身仍然看不到它,但你可以编写 vim 脚本来显示它,或者只是git rev-parse
在另一个窗口中运行或在暂停编辑器之后运行。)
...如果在本地和远程提交之间进行了 git merge-base
这可能会给你一个不同的提交。Cherry-pick 通过人为地强制合并基础提交成为待选择提交的(单个)父级来工作:
...--*--o--P--C--o--o <-- some-branch
\
A--B <-- your-branch (HEAD)
如果此时您运行git cherry-pick <hash-of-C>
,则此合并的“合并基础”是 commit P
,而不是 commit *
。
运行git merge-base your-branch some-branch
会报告 commit 的哈希 ID *
,但这不是此合并操作的合并基础。Git 需要将更改 from P
toB
作为“您的更改”应用到P
,并将这些更改与从P
to的更改结合起来C
。