我看到很多关于如何在重新定位和/或挤压时摆弄作者日期和提交日期的问题,但我还没有掌握原因。
似乎很明显,是否另一个人……
Git本身没有日期的语义。好, 几乎 没有。所以这取决于你。大多数情况下,Git只会向您显示作者日期可见的提交。如果你使用 git log --pretty=fuller ,它显示了两组日期可见的提交,就是这样。
git log --pretty=fuller
只要Git有这个规则就会出现这个规则的一个例外 在其肮脏的突起中不止一次提交 。该 git log 命令一次只能显示一个提交,但是你有某种原因,并且在某种程度上它会告诉你 两个或更多 提交。例如,假设你有这个:
git log
C--D <-- br1 / ...--B \ E--F <-- br2
你跑了 git log br1 br2 要么 git log --all 。你刚刚告诉Git: 告诉我提交 D 和 F ,然后继续从那里向后工作,以显示我早先的提交。 Git现在应该展示哪一个, D , 要么 F ?它有两种选择。
git log br1 br2
git log --all
D
F
Git默认在这一点上做的是选择一个 以后的提交日期 。这有点不幸,因为它默认显示的日期是 作者约会 。但是你可以随心所欲地制作它。
该 git log 命令有很多选项 更改 哪个 D 要么 F 它选择首先显示。这些包括 --author-date-order 和 --topo-order 。
--author-date-order
--topo-order
一旦Git 具有 显示 D 要么 F ,它也是 C 要么 E 进入清单。也就是说,它将列出的那个放入列表中。现在列表说 或 C F 要么 D E 。和以前一样,它根据你告诉它使用的任何规则集来选择一个 - 并且表明这一点。的父母 C 要么 D 是 B 所以,如果它只显示其中任何一个,现在 B 在列表中。这种情况一再重复,直到列表缩小到只有一个条目 - 由于规则往往有利于完成 C-D 和 E-F 在回到之前的链条 B 。而且,一些规则,如 --topo-order ,告诉Git它 必须 实现这一点, 即使是日期 B 很奇怪 。
C
E
C F
D E
B
C-D
E-F
如果您发现Git以奇怪的顺序列出内容,请使用 git log --graph (也许还有 --oneline )。该 --graph 选项告诉 git log 两件事情:
git log --graph
--oneline
--graph
绘制提交日志的粗略的基于ASCII的文本图。它是垂直定向的,而不是像我在StackOverflow帖子中那样横向定向,但对于简单的图形或图形片段,这很好。
使用 --topo-order 在做图形漫步时。也就是说,一旦Git开始了 C-D 腿,它会 完 那条腿 之前 开始 E-F 腿。
(你可以覆盖隐含的 --topo-order 用,例如, --date-order 要么 --author-date-order 。)
--date-order
请注意,无论任何提交日期顺序如何,如果Git只有它的爪子 一 承诺,你说,例如, git log br1 所以Git开始 D 只是表明一个提交。这会清空其显示的提交列表,然后放置 D 的父母进入名单。该列表现在列出 C ,所以Git表示 C ,清空列表,但放 B 进入清单。所以现在Git表示 B ,清空列表,但放 B 的父母,等等。结果是简单,线性,向后走。所以,如果没有 合并提交 ,你在分支结束时启动Git,你只看到分支:
git log br1
...--o--o--o--tip <-- branch
但如果有的话 合并提交 :
C--D / \ ...--o--o G--o--...--tip <-- branch \ / E--F
然后当Git显示 G ,它说 都 D 和 F 进入其列表。所以现在你在 列表中有两个提交 情况,你会遇到首先显示哪个提交的问题,就像使用 git log --all 。
G
如果你使用 --first-parent 强迫Git不要跟随 另一条腿 合并,这完全消失了。有时这是好事,有时候不是。如果你使用 --graph 让Git绘制图形,有时候会有所帮助,有时图形会变得疯狂复杂。
--first-parent
虽然这与此无关 混帐 ,这里值得一提的是曾经的Git 毂 已经开始在拉取请求中显示提交,Git 毂 用commit-ordering开始做自己的事情。它停止使用所有正常的Git规则,并开始使用Git 毂 的规则。这些规则对GitHub人员有意义,但对GitHub的许多用户而言并非如此。你必须在这里与GitHub的人交谈。