git log 默认显示 head 可达的所有提交而非分支独有历史;用 --first-parent 可只保留主线提交,配合 --oneline 实现简洁筛选,指定分支名如 git log feature/login --first-parent --oneline 即可免切换查看。

直接用 git log 查分支历史,不加参数基本找不到你要的提交——它默认显示的是当前 HEAD 可达的所有提交,不是“这个分支上独有的”。想精准定位,得靠参数组合。
只看当前分支主线提交(跳过 merge)
很多人误以为 git log 就是当前分支的“干净”历史,其实只要这个分支 merge 过别人,那些被合进来的提交也会混进来。用 --first-parent 才能只保留主干上的提交,也就是你每次 git merge 时自己那条线上的 commit。
-
git log --first-parent --oneline:最常用组合,一行一条,不带合并分支的噪音 - 别加
--all,否则会拉所有分支,和“只看当前分支”目标冲突 - 如果当前在 detached HEAD 状态,
git log仍按 HEAD 指向输出,不是按分支名算——先git branch确认你在哪
查指定分支(不切换、不污染工作区)
不需要先 git checkout feature/login 再 git log,既慢又可能改掉你正在写的代码。直接把分支名当参数传给 git log 就行。
GitHub 仓库备份技能 - 将 OpenClaw 工作空间自动或手动备份至 GitHub 私有仓库。支持自动定时备份和手动交互式配置,引导完成 Token 配置、仓库创建、首次备份及定时任务设置。用途:(1) 首次设置 (2) 日常备份。
-
git log feature/login --oneline:简洁列出该分支所有可达提交 -
git log --first-parent feature/login --oneline:排除该分支 merge 进来的提交,只留主线 - 分支名拼错会报
fatal: ambiguous argument 'featrue/login': unknown revision,建议先git branch -a看全名(含远程分支)
按作者、时间或关键词快速过滤
日常根本不是“看全部”,而是“张三昨天改了啥”“上线前包含 fix 的提交有哪些”。这些筛选必须组合使用,单个参数意义有限。
-
git log --author="zhangsan" --since="2026-06-10" --oneline:注意双引号,用户名含空格时 shell 会拆开 -
git log --grep="fix" --oneline:默认区分大小写;想忽略大小写加-i,即--grep="Fix" -i -
git log --since="1 week ago" --until="2026-06-12" --oneline:时间范围支持自然语言,但--until是“截止到”,不含当天
查某个文件的修改历史
路径不能直接跟在 git log 后面,否则 Git 会把它当选项或分支名解析,尤其路径含空格或以 - 开头时直接报错。
- 必须用
--显式分隔:git log -- src/utils.js - 想看具体改了什么:
git log -p -- src/utils.js - 只关心谁动过:
git log --author="wang" -- src/utils.js - 如果文件曾被重命名,普通
git log --可能漏掉早期记录;要完整追踪,得加--follow:git log --follow -- src/utils.js
真正容易被忽略的是:Git 历史是 DAG(有向无环图),不是线性列表。所谓“某分支的历史”,本质是“从该分支 tip 能 reach 到的所有提交”,而 --first-parent 和 --all 的行为差异,正源于对这个图结构的不同遍历策略。没理解这点,参数就只是死记硬背。










