如何在 Git 中获取合并提交的父项?

Posted

技术标签:

【中文标题】如何在 Git 中获取合并提交的父项?【英文标题】:How can I get the parents of a merge commit in Git? 【发布时间】:2012-02-21 23:30:16 【问题描述】:

一些 Git 命令将父级作为修订;其他(例如git revert),作为父编号。我怎样才能得到这两种情况的父母?

我不想使用图形日志命令,因为这通常需要向下滚动一棵长树才能找到第二个父级。

【问题讨论】:

【参考方案1】:

Simple git log <hash> 调用合并提交显示其父级的缩写哈希:

 $ git log -1 395f65d
 commit 395f65d438b13fb1fded88a330dc06c3b0951046
 Merge: 9901923 d28790d
 ...

git根据他们的编号输出父母:第一个(最左边的)哈希是第一个父母,依此类推。

如果你想要的只是散列,两个等效的选择是:

$ git log --pretty=%P -n 1 <commit>
$ git show -s --pretty=%P <commit>

git rev-list 也可以显示父母的哈希值,尽管它会首先列出提交的哈希值:

$ git rev-list --parents -n 1 <commit>

如果你想检查父母,你可以直接用克拉作为&lt;commit&gt;^1&lt;commit&gt;^2,例如:

git show <commit>^1

这确实概括了;对于章鱼合并,您可以将第 nth 父级称为&lt;commit&gt;^n。您可以使用&lt;commit&gt;^@ 引用所有父母,但这在需要单个提交时不起作用。其他后缀可以出现在第 nth 个父语法之后(例如 &lt;commit&gt;^2^&lt;commit&gt;^2^@),而它们不能出现在 ^@ 之后(&lt;commit&gt;^@^ 无效)。有关此语法的更多信息,请阅读 rev-parse 手册页。

【讨论】:

回答我自己的问题:'git rev-list --parents -n 1 ' 的结果是:。即,父母是一个编号。 你也可以使用 git-parents github.com/danielribeiro/dotfiles/blob/master/bin/git-parents。只需将其放入您的 PATH 并调用 $ git parents 默认为 HEAD) @jefromi,我真的希望“还请注意,正常的日志输出确实显示...”部分位于您的答案之上。 :) git loggit show 在只有一个父母时输出非常不同的东西。如果你想要一致性,首选git log 这个答案在我的带有git (v2.17.1) 的 Ubuntu 机器上不起作用。我在git log -1 输出中看不到Merge 文件。【参考方案2】:

以下是我发现的查看合并父级的最简单方法

git show --pretty=raw 3706454

【讨论】:

git cat-file -p 3706454 相同但更短:) 另一个选项git log --pretty=raw -1 3706454

以上是关于如何在 Git 中获取合并提交的父项?的主要内容,如果未能解决你的问题,请参考以下文章

如何在git中获取合并请求的所有提交?

如何在php中数组的父项下显示子项

如何将父项的第一个子项中的属性移动到 XSLT 中的父项?

在点击其各自的父项(列表视图的项目)后,如何更改标签的文本颜色?

Mercurial - 如何从fork的父级获取最新更改?

获取合并提交的git diff输出结果