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

git log --since遗漏提交:如何获取所有符合时间条件的提交?

解决Git提交时间非线性时git log --since遗漏提交的问题

当分支合并了外部仓库的PR或通过cherry-pick引入旧提交后,提交的拓扑顺序与时间顺序不一致,默认的git log --since会因为历史简化策略,遇到不符合条件的提交就停止遍历,导致后续符合条件的提交被遗漏。针对你提到的提交链(A:2:00、B:3:00、C:2:15、D:2:16),要获取A、C、D这些符合时间条件的提交,可以用以下几种方法:

  • 取消历史简化,遍历所有可达提交
    使用--full-history和--no-simplify-merges参数强制Git遍历所有分支历史,不进行简化:

    git log --since="2:00" --until="2:20" --full-history --no-simplify-merges
    

    这两个参数会让Git保留合并提交的所有父分支,不会因为某个分支的提交不符合条件就跳过其他分支的遍历。

  • 直接处理所有可达提交
    通过--no-walk=unsorted让Git处理当前分支所有可达的提交,再筛选符合时间条件的:

    git log --since="2:00" --until="2:20" HEAD --no-walk=unsorted
    
  • 先列出所有提交哈希再筛选
    先用git rev-list获取当前分支所有提交的哈希,再逐个检查时间条件:

    git rev-list HEAD | xargs git log --since="2:00" --until="2:20"
    

原因说明

默认情况下Git会启用历史简化策略:它假设提交历史的时间是线性递增的,当遇到一个不符合--since/--until条件的提交时,会停止遍历该提交的父分支。但合并外部PR或cherry-pick操作会打破时间线性,导致后续拓扑位置的提交时间更早,从而被默认策略遗漏。上述方法都是通过强制遍历所有可达提交,避免这种简化带来的遗漏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 05:05:03