我有一个常规提交夹在两个合并提交之间:
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
当前指向SHA dc79715411f87e4a4c42c38559ba56ea911a0c01
。
但是,当我键入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~
指向SHA 097a5518087219327ed9f6f3a4499d54a1450cc2
。但是,我希望HEAD~
引用紧接HEAD
或SHA 415f5d183dcbf48fb5d27714112308f965438695
之后的提交。为什么不是这种情况?
编辑:
运行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
答案 0 :(得分:4)
Git的git log
命令显示您以某种顺序进行提交。好的,到目前为止,这很明显,但这是棘手的部分:那是什么顺序?
git log
显示的第一次提交是合并提交。这意味着它有两个父母。为了方便起见,我们称它们为“妈妈”和“爸爸” :-)。因此,在向您展示了该承诺之后,现在Git将首先向您展示妈妈。也许爸爸先行!它会显示哪一个?默认值为:显示年轻(较新)提交。
我们知道HEAD~1
是提交097a5518087219327ed9f6f3a4499d54a1450cc2
。这是第一个父项,按父项顺序命名,我们将其称为Dad
,因为D
在M
之前。但是,按提交日期的顺序,它可能不是第一个 commit 。如果妈妈比爸爸小,git log
会在HEAD
之后显示妈妈。然后,妈妈有了父母,如果事实证明妈妈的父母比爸爸年轻,Git会向您显示 。只有当爸爸要显示的下一个提交时,它才会显示爸爸。
git log
有排序选项,可以告诉它显示哪些提交以及何时显示。不过,最好的办法是,我们也可以同时使用git log --graph
和--oneline --decorate
来使用 commit graph 。后缀^
和~
是图追随者,它们不会查看提交本身的年龄。日志排序做会默认查看提交的年龄,但是当您使用--graph
时会停止这样做。