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

使用--after/--before参数时git log无法列出已存在提交的问题

Git log 日期筛选失效问题原因及解决方案

核心原因

  • 时区解析偏差:git log的--after/--before参数默认将输入的时间视为当前系统的本地时区进行解析,而lore.kernel邮件归档仓库的提交日期(无论是作者日期还是提交者日期)通常带有时区标识(多为UTC或邮件发件人所在时区),如果两个时区存在差异,会出现计算偏差,导致字面日期匹配的提交被过滤。比如提交日期是UTC时区的2021-08-23 00:00,如果你本地是西五区,输入的--after='2021-08-22 23:59:59'会被解析为西五区时间,对应UTC时间为2021-08-23 04:59:59,早于该时间的提交就会被排除,极端时区差下甚至会出现指定--after=2000-01-01也过滤掉目标提交的情况。
  • 日期筛选字段不匹配:Git提交包含两个独立的日期字段:
    • 作者日期(对应pretty格式的%ad占位符):记录邮件实际发送的时间
    • 提交者日期(对应pretty格式的%cd占位符):记录邮件被归档到lore仓库的时间
      默认情况下git log的时间筛选规则只对提交者日期生效,如果你要筛选的是邮件发送的作者日期,默认参数不会匹配该字段。你观察到的“指定--after为2021年8月1日时只能看到8月25、26、27日的提交”,本质就是8月23日的邮件实际归档入库的时间在8月25日之后,默认用提交者日期筛选自然看不到对应的记录。

修复方案

  1. 给时间参数明确指定UTC时区,避免时区偏差:
git log --pretty='%H - %cd' --after='2021-08-22 23:59:59 UTC' --before='2021-08-24 00:00:00 UTC'
  1. 如果要基于邮件发送时间(作者日期)筛选,添加--author-date参数让时间筛选规则作用于作者日期:
git log --pretty='%H - %ad' --author-date --after='2021-08-22 23:59:59 UTC' --before='2021-08-24 00:00:00 UTC'
  1. 调整筛选规则前可以先执行以下命令,确认目标提交的两个日期字段和对应时区:
git log -10 --pretty='作者日期: %ad | 提交者日期: %cd'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 13:06:02