使用since和until过滤Git日志无提交结果的问题排查
Git日志日期筛选无结果问题排查与解决
问题描述
我们的Git仓库有50k+提交记录,使用Git 2.43.0执行命令:
git log origin/master --since='01-01-2024' --until='01-02-2024'
尝试筛选2024年1月1日至2月1日的提交时返回空结果,但该时段实际存在数千条提交。此问题仅出现在1-3月的日期筛选中,4月之后筛选恢复正常。
核心原因
Git的日期解析对MM-DD-YYYY或DD-MM-YYYY格式存在歧义:当日期中的日和月数值都≤12时(比如1月、2月的日期),Git可能错误识别日期格式(例如将01-02-2024解析为1月2日而非预期的2月1日),导致筛选范围完全偏离目标时段;而4月之后的日期(如01-04-2024)因为月数值超过12,解析无歧义,所以筛选正常。
解决方案
1. 使用无歧义的ISO日期格式
改用YYYY-MM-DD格式指定日期,这是Git最稳定的日期解析格式,完全避免歧义:
git log origin/master --since='2024-01-01' --until='2024-02-01'
如果需要更精确的时间范围,可以加上时分秒:
git log origin/master --since='2024-01-01 00:00:00' --until='2024-02-01 00:00:00'
2. 使用英文月份名称格式
用英文月份名称替代数字,同样能消除解析歧义:
git log origin/master --since='Jan 1 2024' --until='Feb 1 2024'
3. 确保远程分支本地镜像为最新状态
虽然问题大概率由日期格式导致,但先确认本地的origin/master是否与远程同步,避免因本地分支过时导致的提交缺失:
git fetch origin
之后再执行筛选命令。
4. 升级Git版本
Git 2.43.0可能存在日期解析相关的小bug,升级到最新稳定版本(如2.44.0及以上)可修复潜在的解析问题:
# 不同系统升级命令示例: # macOS(Homebrew) brew upgrade git # Ubuntu/Debian sudo apt update && sudo apt upgrade git
内容的提问来源于stack exchange,提问作者Sithik Sm
相关产品推荐
相关产品推荐

