2013-04-03 97 views
0

有两个提交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 
+0

它按预期工作:任何提交都不是另一个的祖先。 – wRAR 2013-04-04 15:34:09

+0

如果您想使用除自然提交DAG之外的其他内容来建立提交顺序,请澄清一下。 – wRAR 2013-04-04 15:37:33

+0

@wRAR添加了一个说明,说明我的意图。 – talles 2013-04-04 15:50:40

回答

0

你需要比较两个提交的提交日期。可以在git show(或任何其他合适的命令)中使用--format=fuller或使用包括提交日期字段的自定义格式。

0

唯一的订单git知道的是由祖先关系给出的。提交时间等依赖于提交完成的机器的时钟(可能与月亮一起),可能是一次提交的原始提交时刻,自从修改/编辑多次以来,甚至可能完全是假的。