0

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

请注意,我不是想找出哪个是另一个的祖先,我想知道哪个是第一个被推送的。

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


我尝试git merge-base按照@wRAR 的建议使用。

首先,有一个缺点:git merge-base --is-ancestor不给我输出。它以 0 或 1 退出而不向 stdout 输出任何内容。编写脚本时可以,但是当直接在我的终端上手动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
4

2 回答 2

1

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

于 2013-04-04T15:57:46.777 回答
0

唯一git知道的顺序是祖先关系给出的顺序。提交时间等取决于完成提交的机器的时钟(可能与月球同步),可能是提交的原始提交时刻,此后多次修改/编辑,甚至可能完全是假的。

于 2013-04-04T16:20:20.797 回答