用 git log 提取某分支本周提交记录需指定具体日期范围(如 --since="2024-06-10" --until="2024-06-16")、远程分支(如 origin/main)、排除合并(--no-merges),并用 --pretty=format 自定义可读格式。

怎么用 git log 快速提取某分支本周提交记录
直接用 git log 加时间范围和分支名就能筛出变动,但默认格式太碎,得组合参数才能生成可读日志。别用 --since="1 week ago" 这种模糊表达——它按本地时区计算,CI/CD 里容易跨天漏记录;推荐用具体日期,比如 --since="2024-06-10"。
常用组合:
-
git log origin/main --since="2024-06-10" --until="2024-06-16" --pretty=format:"%h %s [%an]" --no-merges:排除合并提交,只看实际改动 - 加
--grep="feat\|fix\|refactor"可过滤带规范前缀的提交(前提是团队遵守 Conventional Commits) - 如果分支名含斜杠(如
feature/user-login),记得用引号包裹:git log "feature/user-login"
为什么 git diff 不适合做周报变动统计
git diff 比较的是文件内容差异,不是提交行为本身。你拉取的“本周改动”要体现“谁、什么时候、改了哪些功能”,而不是“某行从 A 变成 B”。用 diff 容易漏掉重构类提交(没改行数但逻辑大调),也难以关联 PR 或 Jira 编号。
真正该用的是提交元数据:
-
%h(短哈希)和%s(标题)能快速定位变更点 -
%d可显示 tag 或分支引用,方便确认是否已上线 -
--stat加在log后能附带增删行数,比纯diff更轻量且可读
自动化脚本里怎么避免重复统计或漏统计
关键在时间边界和远程分支同步。本地 main 分支可能落后,直接 git log main 会漏掉刚 push 到远程但没 pull 的提交。必须先 git fetch origin,再基于 origin/main 统计。
常见陷阱:
- 用
HEAD代替具体分支名 → 统计当前所在分支,不是目标分支 - 没设
--no-merges→ 把 merge 提交当有效改动,日志虚高 - 忽略
--cherry-pick场景 → 同一提交被 cherry-pick 到多个分支,需去重(加--remotes=origin+--oneline配合sort -u)
怎么把日志转成 Markdown 表格发到钉钉/飞书
纯文本日志难读,但没必要写完整渲染器。用 awk 或 sed 做简单格式转换更稳:
git log origin/main --since="2024-06-10" --until="2024-06-16" --pretty=format:"|%h|%s|[%an]|" --no-merges | sed '1i|提交|摘要|作者|' | sed 's/$/ /'
输出就是标准 Markdown 表格行,复制粘贴进群聊即可。注意:| 要转义或用单引号包住命令,否则 shell 会当管道符截断。
如果需要关联 PR 链接,且提交信息含 #123,可用 sed 's/#\([0-9]\+\)/[#\1](https:\/\/github.com\/org\/repo\/pull\/\1)/g' 自动补链接——但得确认 Git 提交里真写了 issue 号,别硬匹配导致误替换。
最麻烦的其实是时间对齐:开发用 UTC 提交,产品要看北京时间周报,--since 得换算成 UTC 时间段,不然周一早 9 点前的提交会被算进上周。











