在 git-merge 中使用 vimdiff,如何显示提交 ID?

using vimdiff in git-merge, how can I show the commit ids?

我正在执行一个导致合并冲突的 cherry-pick,当我解决它时,默认的合并工具 Vimdiff 被打开。有 4 个窗格,顶部是 Local 、 base 和 remote 。但是我注意到该库没有我希望看到的文件版本,如果在本地和远程提交之间进行了 git merge-base。这是 git/vimdiff 中的缺陷吗?我如何查看基本窗格中显示的是哪个提交?

vimdiff 不知道合并基础提交哈希 ID; Git 不会告诉 vimdiff 它是什么。事实上,散列 ID 在任何地方都不可见 Git 对其保密。

但是,您的问题正文开头是这样的:

I am doing a cherry-pick

因此您可以轻松找到基于合并的提交哈希 ID:它是您正在挑选的提交的父项。

Is this is a defect in git/vimdiff ...

我想这有点见仁见智。 (我确实希望 Git 留下一个 MERGE_BASE_HEAD 文件或类似的文件——vimdiff 本身仍然看不到它,但你可以编写 vim 脚本来显示它,或者只是 运行 git rev-parse 在另一个 window 或暂停编辑器之后。)

... if did git merge-base between the local and the remote commit

这可能会给您不同的提交。 Cherry-pick 通过人为地强制合并基础提交成为要被选择的提交的(单个)父级来工作:

...--*--o--P--C--o--o   <-- some-branch
      \
       A--B   <-- your-branch (HEAD)

如果此时你 运行 git cherry-pick <hash-of-C>,此合并的 "merge base" 是提交 P,而不是提交 *.

运行 git merge-base your-branch some-branch 将报告提交 * 的哈希 ID,但这不是此合并操作的合并基础。 Git 需要将 PB 的更改作为 "your changes" 应用到 P,并将这些更改与 P 的更改结合起来至 C.