用--since和--until按日期范围查提交,支持iso格式(如"2024-04-01")和自然语言(如"2 weeks ago"),错误格式如"2024/03/15"会被静默忽略;--after是--since别名,旧版git可能不支持。

git log 怎么按日期范围查提交
直接用 --since 和 --until 参数,它们支持自然语言(比如 "2 weeks ago")和标准日期格式("2024-03-15"),不需要额外工具或脚本。
常见错误是把日期写成 2024/03/15 或 15-03-2024 —— Git 只认 ISO 格式或带单位的描述,否则会静默忽略参数,返回全部日志。
-
git log --since="2024-04-01" --until="2024-04-10":查 4 月 1 日到 10 日(含)的提交 -
git log --since="yesterday":查昨天至今的提交(注意时区按本地 Git 配置) -
git log --since="2024-04-05" --author="alice":组合筛选,避免漏掉合并提交里的作者信息
为什么 git log --after 不起作用
--after 是 --since 的别名,但部分旧版本 Git(git commit --date 或 rebase 修改过 author date,而想按真实编写时间查,就得加 --author-date-order 并配合 --pretty 看具体字段。
- 默认
git log显示的是 committer date,也就是执行 commit 命令的时间 - 用
git log --pretty=format:"%h %ad %an" --date=short可确认实际用的是哪个时间字段 - 如果团队用 CI 自动提交,committer date 可能批量一致,此时必须用
%ad(author date)+--since才准
按工作日/某天上午筛选提交靠谱吗
Git 原生命令不支持“周一到周五”或“9:00–12:00”这种粒度。强行用 --since="09:00" 会报错或无效。真有这类需求,得靠 shell 管道 + awk 或 grep 后处理。
-
git log --pretty=format:"%h %ad %s" --date=iso | grep "2024-04-08.*09:":查某天上午的提交(依赖输出格式稳定) - 注意
--date=iso输出形如2024-04-08 10:23:15 +0800,空格和冒号位置固定,方便文本匹配 - Windows PowerShell 用户慎用
grep,改用sls(Select-String)且需转义冒号
git log 时间筛选慢?可能是没加限制
在大仓库里跑无限制的 git log --since="1 year ago" 会遍历所有分支、所有提交,尤其带 --all 时更卡。这不是时间参数的问题,而是 Git 默认从 HEAD 往前扫完整图谱。
- 加上
-n 50限制条数,能立刻提速:git log -n 50 --since="1 week ago" - 指定分支比
--all快得多:git log main --since="3 days ago" - 如果只关心某目录变更,补上路径:
git log --since="2024-04-01" -- src/utils/,Git 会跳过无关文件的提交
时间筛选看着简单,但 committer/author 两套时间、本地时区、输出格式、分支范围这四个点一碰就容易出偏差。调的时候先用 --pretty 把时间字段打出来看一眼,比猜快得多。











