git log --graph 是唯一能原生清晰展示分支合并关系的命令,必须搭配 --oneline 和 --all 使用;--oneline 压缩提交信息以确保连线可读,--all 显示所有本地与远程分支;终端宽度不足时需配合 --no-pager 或调小字体。

直接看 git log --graph 就行,别绕弯——它不依赖 GUI、不卡终端、不丢合并点,是唯一能一眼看清“谁合进了谁、谁先谁后、有没有分叉再合并”的原生命令。
git log --graph 为什么必须带 --oneline --all
单独敲 git log --graph 会输出完整提交信息,密密麻麻全是哈希和作者,图反而被挤得看不清;漏掉 --all 就只显示当前分支,远程分支(比如 origin/main)和本地其他分支全不出现,等于关掉一半视野。
-
--oneline把每条提交压缩成一行,让连线(|、/、\)真正连得上 -
--all拉出所有本地 + 远程分支指针,否则你看不到feature/login是不是已经推上去了 - 终端宽度不够时,连线会断开或歪斜——加
--no-pager或缩小字体再试,别怀疑命令错了
git show-branch 查合并基础点比看图更准
图形再好看,也看不出两个分支到底在哪个 commit 分叉的。git show-branch 直接标出共同祖先(merge base),这才是判断“这个 PR 是否真包含 feature-X 的改动”的依据。
-
git show-branch main feature/login:列出两分支各自独有的提交,并在共同祖先行打! -
git show-branch -a:快速扫一遍哪些分支长期没跟main同步,origin/main不会自动出现,得写全名 - 它不画图,但输出里那个带
!的 commit ID,就是 merge base——CI 报“main 上跑不过,feature 本地却好好的”,就从这儿查起
git log --merges 只看合并动作本身
想审计“谁在什么时候把哪个分支合进了 main”,翻全量日志效率极低。git log --merges 过滤掉所有普通提交,专盯 merge 类型提交。
-
git log --merges --first-parent --oneline main:只看main上的 merge 提交,忽略被合入分支里的内部提交(比如 dev 分支自己又 commit 了三次) - 默认不显示被合并分支名——光看
Merge branch 'dev'不知道合的是哪次 dev 提交,得加--pretty=fuller或--stat才能看到上下文 -
git log -1 --merges --simplify-by-decoration:常用于 CI 脚本,判断当前构建是否来自一次真正的 merge(而不是单个 commit 推送)
图形错乱或没输出?先确认三件事
不是命令失效,大概率是环境或理解偏差:
- 执行
git log --merges没输出?说明当前分支上确实没有 merge 提交——可能是全程用 rebase,也可能压根没合过 -
git log --graph输出全是竖线(|)没分叉?说明历史是线性的,压根没产生过分支合并,只有 fast-forward - 看到
Merge branch 'dev'但dev分支删了?Git 不删历史,只要 commit 还在引用链里,它就还在图里——删分支只是删指针,不是删提交











