如何在git中获取合并提交的父母?


140

一些git命令将父级作为修订版;其他(例如git revert)作为父编号。两种情况下如何获得父母。我不想使用图形化日志命令,因为这通常需要向下滚动一棵长树才能找到第二个父级。

Answers:


179

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>

如果要检查父母,则可以直接用<commit>^1和来指代克拉<commit>^2,例如:

git show <commit>^1

的确如此。对于章鱼合并,您可以将第n 父对象称为<commit>^n。您可以使用来引用所有的父级<commit>^@,尽管在需要一次提交时这不起作用。附加后缀可以在n之后出现父语法(例如<commit>^2^<commit>^2^@),而它们不能后^@<commit>^@^无效)。有关此语法的更多信息,请阅读rev-parse手册页。


1
回答我自己的问题:'git rev-list --parents -n 1 <somehash>'的结果是:<somehash> <parent1> <parent2>。即,父母是一位。
mikemaccana

您还可以使用git-parents github.com/danielribeiro/dotfiles/blob/master/bin/git-parents。只需将其放在您的PATH中,然后调用$ git父母<commit>(<commit>默认为HEAD)
Daniel Ribeiro 2013年

@jefromi,我真的很希望“还请注意,正常的日志输出确实会显示...”部分位于答案的顶部。:)
亚当·蒙森2014年

3
git loggit show当只有一个父母时,会输出非常不同的东西。身高:git log如果你想要的一致性。
Noel Yap

这个答案在我的Ubuntu计算机上不起作用git (v2.17.1)。我Mergegit log -1输出中看不到文件。
mja

29

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

git show --pretty=raw 3706454

14
git cat-file -p 3706454 是一样的,只是更短:)
萨布根顿

1
这两个都是非常有用的!
tecknut

另一种选择git log --pretty=raw -1 3706454
selalerer
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.