为什么"git show HEAD~"在我的"git log"列表中显示第三个提交?



我有一个常规提交夹在两个合并提交之间:

commit dc79715411f87e4a4c42c38559ba56ea911a0c01 (HEAD -> master, origin/master, origin/HEAD)
Merge: 097a551 415f5d1
Author: <redacted>
Date:   Tue Aug 14 11:29:54 2018 -0400
Merge pull request #119 from <redacted>/th-dumb-init
Use dumb-init instead of phusion
commit 415f5d183dcbf48fb5d27714112308f965438695
Author: <redacted>
Date:   Mon Aug 13 16:13:52 2018 -0400
Use dumb-init instead of phusion
commit 097a5518087219327ed9f6f3a4499d54a1450cc2
Merge: 9aec35a b63cd1f
Author: <redacted>
Date:   Tue Jul 24 11:01:52 2018 -0400
Merge pull request #118 from <redacted>/emails_off
Turn off email alerts for 'orders_populate_every_five_min' Airflow job

当我运行git show HEAD时,我看到以下内容:

[ sc-airflow ] $ git show HEAD
commit dc79715411f87e4a4c42c38559ba56ea911a0c01 (HEAD -> master, origin/master, origin/HEAD)
Merge: 097a551 415f5d1
Author: <redacted>
Date:   Tue Aug 14 11:29:54 2018 -0400
Merge pull request #119 from <redacted>/th-dumb-init
Use dumb-init instead of phusion

正如我所期望的那样,因为HEAD目前指向 SHAdc79715411f87e4a4c42c38559ba56ea911a0c01.

但是,当我键入git show HEAD~时,我看到以下内容:

[ sc-airflow ] $ git show HEAD~
commit 097a5518087219327ed9f6f3a4499d54a1450cc2
Merge: 9aec35a b63cd1f
Author: <redacted>
Date:   Tue Jul 24 11:01:52 2018 -0400
Merge pull request #118 from <redacted>/emails_off
Turn off email alerts for 'orders_populate_every_five_min' Airflow job

这告诉我HEAD~指向SHA097a5518087219327ed9f6f3a4499d54a1450cc2。 但是,我希望HEAD~引用HEAD或 SHA415f5d183dcbf48fb5d27714112308f965438695后面的提交。 为什么不是这样呢?

编辑:运行git log --graph --all --oneline --decorate显示以下内容:

*   dc79715 (HEAD -> master, origin/master, origin/HEAD) Merge pull request #119 from <redacted>/th-dumb-init
|  
| * 415f5d1 Use dumb-init instead of phusion
|/  
*   097a551 Merge pull request #118 from <redacted>/emails_off

Git 的git log命令按某种顺序显示提交。 好的,到目前为止,这很明显,但这是棘手的部分:这是什么顺序?

git log显示的第一个提交是合并提交。 这意味着它有两个父母。 为方便起见,让我们称他们为"妈妈"和"爸爸":-(。 所以,在向你展示了那个提交之后,现在 Git 将首先向你展示妈妈。 或者也许是爸爸先! 它将显示哪一个? 默认值为:显示较年轻(较新(的提交

我们知道HEAD~1是提交097a5518087219327ed9f6f3a4499d54a1450cc2。 这是第一个父级,按照父顺序——让我们称这个为Dad,因为D先于M。 不过,按照提交日期顺序,这可能不是第一次提交。 如果妈妈比爸爸小,git logHEAD后给妈妈看。 然后妈妈有一个父母,如果事实证明妈妈的父母比爸爸年轻,Git 会告诉你接下来的承诺。 只有到了爸爸是下一个要展示的地步,它才会展示爸爸。

有一些排序选项可以git log告诉它要显示哪些提交以及何时显示。不过,您最好的选择是我们使用git log --graph(也许也使用--oneline --decorate(,以便您可以看到提交图^~后缀运算符是图形追随者,并且不查看提交本身的年龄。 默认情况下,日志排序查看提交的期限,但在使用--graph时会停止这样做。

最新更新