有两个提交SHA1,我怎么得到哪个先去了手动分析git日志?如何找出哪个提交先行?
请注意,我没有试图找出哪一个是另一个的祖先,我想知道哪一个先被推。
我想通过它在git历史中的时间顺序来获取它,而不是通过提交日期。任何方法都是受欢迎的,但首选的是直接的方式(我直接在终端仿真器上使用它,而不是脚本)。
我尝试使用git merge-base
作为@wRAR建议。
首先,有一个缺点:git merge-base --is-ancestor
不给我输出。它以0或1退出,而不输出任何内容到标准输出。它可以当脚本,但当手动直接在我的终端上使用它,我必须在一个额外的步骤后检查退出状态(echo $?
在bash上,$LASTEXITCODE
在PowerShell上)。不是一个交易破坏者,但会产生一点麻烦。
但是,无论如何,它没有工作。
工程在以下情形:
> git log --oneline --graph
| * <SHA1 D> Fourth commit.
| * <SHA1 C> Third commit.
| * <SHA1 B> Second commit.
| * <SHA1 A> First commit.
> git merge-base --is-ancestor <SHA1 B> <SHA1 C>
> echo $?
0
> git merge-base --is-ancestor <SHA1 C> <SHA1 B>
> echo $?
1
但不是在这一个(没有做什么,我打算):
> git log --oneline --graph
* <SHA1 D> Merged work.
|\
| * <SHA1 C> Paul's first commit.
* | <SHA1 B> John's second commit.
|/
* <SHA1 A> John's first commit.
> git merge-base --is-ancestor <SHA1 B> <SHA1 C>
> echo $?
1
> git merge-base --is-ancestor <SHA1 C> <SHA1 B>
1
它按预期工作:任何提交都不是另一个的祖先。 – wRAR 2013-04-04 15:34:09
如果您想使用除自然提交DAG之外的其他内容来建立提交顺序,请澄清一下。 – wRAR 2013-04-04 15:37:33
@wRAR添加了一个说明,说明我的意图。 – talles 2013-04-04 15:50:40