git log --first-parent --oneline branch-name是最干净的写法:跳过合并提交,只保留当前分支主线上的提交;不加--all,避免混入其他分支历史;查远程分支需先git fetch同步。

直接用 git log branch-name 就能看指定分支的提交日志,但默认输出混着合并进来的提交、不带分支拓扑、难定位关键改动——得加参数才真正可用。
只看当前分支主干提交(跳过 merge)
很多人以为 git log 默认就只显示当前分支自己的提交,其实它展示的是「HEAD 可达的所有提交」,只要当前分支 merge 过别人,那些被合进来的提交也会塞进来,干扰判断。
-
git log --first-parent --oneline是最干净的写法:跳过所有 merge 提交,只保留当前分支主线上的 commit - 别加
--all——git log --first-parent --oneline --all看起来炫,实际是把所有分支堆一起,根本不是“当前分支” - 如果当前在 detached HEAD 状态,
git log会从当前 commit 往上追溯,不是按分支名算的,先git branch确认位置
查某个分支但不切换(避免污染工作区)
不用 git checkout feature/login && git log,既慢又可能改乱暂存区。直接指定分支名即可:
GitHub 仓库备份技能 - 将 OpenClaw 工作空间自动或手动备份至 GitHub 私有仓库。支持自动定时备份和手动交互式配置,引导完成 Token 配置、仓库创建、首次备份及定时任务设置。用途:(1) 首次设置 (2) 日常备份。
-
git log feature/login --oneline查该分支最新提交列表 - 拼错分支名会报
fatal: ambiguous argument 'featrue/login': unknown revision,先git branch -a确认名字(注意远程分支带origin/前缀) - 想排除某分支的提交?Windows CMD 下要用引号:
git log main "feature/*",不能写git log main ^feature(^在 CMD 是特殊字符)
查文件或路径的修改历史
git log src/utils.js 是错的——Git 会把它当选项或参数名解析,尤其路径含空格或以 - 开头时直接报错。
- 必须用
--显式分隔:git log -- src/utils.js - 想看谁改的:
git log --author="wang" -- src/utils.js - 想看具体改了啥:
git log -p -- src/utils.js,但大文件慎用,-p 会加载完整 diff,卡顿明显 - 中文路径?确保终端编码为 UTF-8,否则可能乱码或报
fatal: bad object
过滤提交:作者、时间、关键词
日常真不是看“全部”,而是找“张三昨天改的”“包含 fix 的 PR”“上线前最后三次提交”。
- 查作者:
git log --author="zhangsan" --oneline(双引号防空格,大小写敏感) - 查时间:
git log --since="2024-05-20" --oneline或--since="1 week ago",支持自然语言 - 查关键词:
git log --grep="login" --oneline(默认区分大小写;加-i忽略大小写) - 组合用更准:
git log --author="lisi" --since="2024-06-01" --grep="bug" --oneline - 注意:
--grep和-S(pickaxe)这类参数在超大仓库里会遍历每个 commit 的 diff,响应可能秒级延迟,别在 CI 脚本里无限制用
真正容易被忽略的是:git log 不联网,git log origin/main 显示的是你本地缓存的远程指针,不是实时状态;查刚 push 的提交,得先 git fetch 同步。










