【问题标题】:How to find out which commit went first? [duplicate]如何找出哪个提交先进行? [复制]
【发布时间】:2013-04-03 20:25:38
【问题描述】:

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

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

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


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

首先,有一个缺点:git merge-base --is-ancestor 没有给我输出。它以 0 或 1 退出而不向 stdout 输出任何内容。编写脚本时可以,但是当 手动 直接在我的终端上使用它时,我必须在之后的额外步骤中检查退出状态(echo $?on bash,$LASTEXITCODEon 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

【问题讨论】:

  • 它按预期工作:两个提交都不是另一个人的祖先。
  • 如果您想使用自然提交 DAG 以外的其他东西来建立提交顺序,请澄清这一点。
  • @wRAR 添加了一条说明我的意图的说明。

标签: git git-log


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2020-04-13
      • 1970-01-01
      • 2012-12-18
      • 2018-11-05
      • 2012-08-09
      • 2013-11-21
      • 2020-11-18
      • 1970-01-01
      • 2013-05-16
      相关资源
      最近更新 更多