git log 默认只显示当前分支历史,查其他分支需显式指定名称;若查不到,先确认分支是否存在、名称是否正确、是否已通过 git fetch 拉取远程分支。

直接用 git log branch-name 就能看分支的提交历史,不用加 --oneline 或 -p 也能生效;但默认只显示当前分支,查其他分支必须显式写名字,否则容易误以为“没记录”。
git log branch-name 查不到提交?先确认分支是否存在
常见错误是输错分支名(比如把 feat/login 写成 feature/login),或该分支还没被 fetch 到本地。Git 不会自动同步远程分支列表,git branch -r 只显示已拉取的远程分支,如果没看到目标分支,得先 git fetch origin。
- 本地分支不存在:用
git checkout -b branch-name origin/branch-name创建并追踪 - 远程分支存在但本地没记录:运行
git fetch --all后再试 - 分支名含特殊字符(如
/):确保没被 shell 当作路径解析,必要时用引号包裹:git log "origin/feat/api-v2"
git log main..dev 为什么只显示部分提交?
这个语法不是“查 dev 分支全部历史”,而是“查在 dev 但不在 main 的提交”。它依赖两个分支的共同祖先,一旦有合并提交(merge commit)没被正确识别,就可能漏掉内容。
- 如果
dev是从main拉出后又多次合并回去,main..dev仍只返回“仅 dev 有”的提交,不包括那些已合入main的变更 - 想看
dev自身完整线性历史(含 merge 提交),用git log dev --first-parent - 想可视化分支分合关系,加
--graph --oneline --all,但注意--all会拉所有本地分支,输出可能爆炸,建议限定范围:git log --graph --oneline main dev
git log --author="张三" 不生效?检查 Git 配置和提交元数据
--author 匹配的是提交对象里的 author 字段,不是 committer,也不是你本地 git config user.name 的值。很多人改了配置却查不到旧提交,是因为历史提交用的是旧邮箱或旧用户名。
- 查某人所有提交(不管 author 还是 committer):
git log --all --grep="张三",但可能误匹配提交信息 - 精准匹配 author 邮箱:
git log --author="zhangsan@company.com",注意邮箱大小写敏感 - 提交里 author 名被缩写或 alias 覆盖(比如显示为
ZS):用git log --pretty="%h %an " | grep "ZS"先确认真实字段内容 - 中文名乱码导致匹配失败:终端编码要设为 UTF-8,Git 配置加
git config --global core.quotepath false
git log 输出太多、太慢?优先加限制条件
大仓库跑 git log 默认遍历全部提交,尤其带 -p 或 --stat 时,I/O 和解析开销明显。别等它卡住,先用参数收口。
- 限制条数:
git log -10比git log快得多,足够日常排查 - 限制时间范围:
git log --since="2026-04-01" --until="2026-05-01",避免扫到三年前的冷数据 - 限制文件路径:
git log --oneline src/只查 src 目录下文件的提交,比全库快一个数量级 - 避免无意义的
--follow:它强制 Git 做重命名链路分析,对未重命名过的文件纯属浪费 CPU
真正难的不是命令怎么写,而是判断“该查哪个分支、哪个时间点、匹配哪段元数据”。Git 日志本质是按条件过滤提交对象的数据库查询,参数组合错了,结果就偏了——而且偏得无声无息。











