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
相关产品推荐
相关产品推荐

