直接用git log branch-name可查看指定分支提交记录,加--oneline--first-parent排除合并提交;按作者、时间或关键词过滤需组合--author、--since、--grep等参数。

想看某个分支的提交记录,直接用 git log 就行,但默认输出容易淹没关键信息——得加筛选条件才实用。
只看当前分支的提交(不含合并提交)
很多人误以为 git log 默认就只显示当前分支的提交,其实它默认显示的是「当前 HEAD 可达的所有提交」,如果当前分支有 merge 过其他分支,那些被合并进来的提交也会混在里面。
- 用
git log --first-parent可以跳过合并进来的历史,只保留主干线上的提交 - 配合
--oneline --graph --all会更清晰,但注意--all会拉所有分支,和本意冲突;应去掉--all,只留--oneline --graph - 常见错误:
git log --oneline --graph --all看起来很炫,但根本不是“只看当前分支”,而是所有分支交叉堆叠,反而难定位
查看指定分支的提交(不切换分支)
不需要 git checkout branch-name 再 log,效率低还可能污染工作区状态。
- 直接运行
git log branch-name,比如git log feature/login - 加
--oneline让每条记录占一行,方便快速扫读 - 如果想排除 merge 提交,写成
git log --first-parent --oneline feature/login - 注意:分支名拼错会报错
fatal: ambiguous argument 'featrue/login': unknown revision,建议先用git branch确认名称
按作者、日期或关键词过滤提交
真实协作中,你往往不是想“看全部”,而是“找某人改的”“找昨天上线的”“找包含 fix 的”。
- 查某人提交:
git log --author="zhangsan" --oneline(注意双引号,用户名含空格时必须) - 查某天之后的提交:
git log --since="2024-05-20" --oneline,支持"1 week ago"这类自然表达 - 搜索提交信息含关键词的:
git log --grep="login timeout" --oneline,默认大小写敏感,加-i忽略大小写 - 组合使用没问题,比如
git log --author="lisi" --since="2024-05-15" --oneline
为什么 git log --all 不适合查单一分支历史
--all 是把所有引用(分支、tag、stash)能触达的提交全列出来,图谱密集、重复多、时间线混乱。尤其当团队分支多、merge 频繁时,同一个提交可能在多个分支路径里反复出现。
- 它不适合用于审计、回溯或交接场景——你无法确定哪条线是目标分支的真实演进路径
- 真正需要“对比分支差异”时,应该用
git log branch-a..branch-b或git diff branch-a...branch-b - 一个容易被忽略的细节:
git log A..B显示的是“B 有、A 没有的提交”,顺序别写反;而A...B(三个点)才是显示两者 diverge 后各自独有的提交
分支历史不是越全越好,而是要匹配你的目的:是排查问题?做发布说明?还是理解功能演进?选对参数比记住所有选项更重要。最常被漏掉的是 --first-parent 和作者/时间过滤,它们才是真正让 git log 变成生产力工具的关键。











