在 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 需要将 P
到 B
的更改作为 "your changes" 应用到 P
,并将这些更改与 P
的更改结合起来至 C
.
我正在执行一个导致合并冲突的 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 需要将 P
到 B
的更改作为 "your changes" 应用到 P
,并将这些更改与 P
的更改结合起来至 C
.