如何找出哪个提交先行?

时间:2013-04-03 20:25:39

标签: git git-log

有两个提交SHA1,如何在没有手动分析git日志的情况下获得哪个提交?

请注意,我并非试图找到哪一个是另一个的祖先,我想知道哪一个是先推出的。

我想通过git历史中的时间顺序来获取它,而不是通过提交日期。任何方法都是受欢迎的,但首选的方式是直接的(我在终端模拟器上直接使用它,而不是在脚本上)。


我尝试使用git merge-base作为@wRAR建议。

首先,有一个缺点:git merge-base --is-ancestor没有给我输出。它以0或1退出而不向stdout输出任何内容。在编写脚本时没问题,但是当手动直接在我的终端上使用它时,我必须在之后的额外步骤中检查退出状态(bash echo $?,PowerShell上的$LASTEXITCODE 。不是交易破坏者,但会产生一些麻烦。

但是,无论如何,它没有用。

适用于以下情形:

> 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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

git唯一知道的命令是祖先关系给出的命令。提交时间等取决于提交完成的机器的(可能与月亮一起)时钟,可能是自修改/编辑多次的提交的原始提交瞬间,甚至可能完全是假的。 / p>