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