You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Git log提交时间戳相同时的显示顺序疑惑及原因排查

Git Log 排序疑问解答

先看示例中带拓扑图的提交输出:

$ git log --oneline --graph
*   c3f035c (HEAD -> master) added files
|\  
| * df07f9e (alt) Add Z
| * 85d52b4 Add Y
| * cb54ba0 Add X
* | 0ee077f Add E
* | d968ccf Add D
* | b0777d7 Add C
|/  
* a0be85a Add B
* bb35288 Add A

这个输出通过--topo-order(--graph隐含该参数)严格按提交的拓扑依赖关系排序,能清晰展示分支合并的实际顺序。

但默认不带--graph的git log输出顺序看起来混乱:

$ git log --oneline
c3f035c (HEAD -> master) added files
df07f9e (alt) Add Z
85d52b4 Add Y
cb54ba0 Add X
0ee077f Add E
a0be85a Add B
d968ccf Add D
bb35288 Add A
b0777d7 Add C

问题解答

  1. 提交C在最后、A和B被分开的原因
    你的猜测完全正确:提交A到E的时间戳完全相同(Thu Mar 9 19:15:54 2023 +0200),这导致Git默认的逆时间序排序失去了判断依据,只能触发备用排序规则。

  2. 时间戳相同时Git Log的排序规则
    当多个提交的时间戳一致时,Git默认的git log(使用--date-order排序策略)会回退到按提交哈希值的逆字典序排列:

    • 把提交哈希当作字符串做字典序比较,哈希值更大的提交会被优先显示;
    • 你看到的混乱顺序本质是这些提交哈希逆字典序的结果:比如提交C的哈希b0777d7在A-E中字典序最小,逆序后就排在最后;提交A的哈希bb35288比D的d968ccf小,所以在D之后显示,最终导致A和B被其他提交隔开。
  3. 为什么--graph输出顺序正常
    --graph参数隐含了--topo-order排序策略,该策略会忽略时间戳,严格按照提交的拓扑依赖(先显示所有子提交,再显示父提交)排列,因此能准确展示分支合并的实际提交顺序,不会出现默认排序的混乱情况。

内容的提问来源于stack exchange,提问作者sayshisnameisreal2222

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 17:45:33