我有一个常规提交夹在两个合并提交之间:
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 log
HEAD
后给妈妈看。 然后妈妈有一个父母,如果事实证明妈妈的父母比爸爸年轻,Git 会告诉你接下来的承诺。 只有到了爸爸是下一个要展示的地步,它才会展示爸爸。
有一些排序选项可以git log
告诉它要显示哪些提交以及何时显示。不过,您最好的选择是我们使用git log --graph
(也许也使用--oneline --decorate
(,以便您可以看到提交图。^
和~
后缀运算符是图形追随者,并且不查看提交本身的年龄。 默认情况下,日志排序会查看提交的期限,但在使用--graph
时会停止这样做。