如何确定哪个父级是 Git 中合并提交的第一个父级



我正在阅读有关在 git 中使用~^运算符的区别,我遇到了这个问题 Git 中的 HEAD^ 和 HEAD~ 有什么区别?

谷歌搜索后,我在网上找不到一个好的解释,那就是 git 如何区分合并提交的第一个父级和第二个父级?

有经验法则吗?

以这个示例为例,feature分支合并develop分支中,创建合并提交G

develop feature/foo
A   D
|   |
B   E
|   |
C   F
 /
G <- develop(HEAD)

哪一个是G的第一个父母?C还是F?为什么是第一个父母?

注意:这不是请求 git 命令来确定第一个或第二个父级。我知道可以使用git show G^1git show G^2来实现。我看到CG的第一个父母,F是第二个父母。但是,我不明白为什么会这样。是否像进行合并提交的分支决定了第一个父级?

是否像进行合并提交的分支决定了 第一亲?

是的。

参考 Git-Tools-Revision-Selection of Pro Git:

您还可以在 ^ 后指定一个数字来标识您的父级 要;例如,D921970^2 表示"D921970 的第二个父级"。 此语法仅对具有多个合并提交有用 父 — 合并提交的第一个父级来自分支 在您合并时处于打开状态(通常是主(,而第二个父级 的合并提交来自已合并的分支(例如,主题(:

git show G^1git show G^2git log -1 --pretty=%P Ggit rev-parse G^@这样的命令可以证明它与描述的相同。此外,使用git cat-file -p G检查提交对象的内容,我们可以看到父项是按顺序记录的。

第一个父级通常是执行合并的分支的HEAD提交。

git commit使用HEAD提交作为第一个父级(如果没有冲突,git merge将为您执行提交,否则您自己执行。无论哪种方式,结果都相同(。 所有方便的命令都遵循此约定。您可以使用git commit-tree自己构建任意提交,并出于任何原因指定您喜欢的任何父级。

因此,提交本身没有父级。但是您可以根据运行git merge的分支说哪一个是父级

相关内容

  • 没有找到相关文章

最新更新