git log --graph --oneline --all --simplify-by-decoration --date=short --pretty=format:"%C(yellow)%h%C(reset) %C(blue)%ad%C(reset) %C(green)%d%C(reset) %s %C(dim blue)(%an)%C(reset)"可图形化显示所有分支的精简提交信息,含哈希、日期、分支/标签名、提交标题及作者,兼顾可读性与拓扑结构。

git log --graph 看分支合并线但信息太简略?
默认 git log --graph 只显示 ASCII 分支线,不标提交哈希、作者、日期,也看不到具体变更文件。实际排查多分支并行开发时,光看“*”和“|”根本分不清哪次 merge 是谁在哪个分支上干的。
用这个组合命令才够用:
git log --graph --oneline --all --simplify-by-decoration --date=short --pretty=format:"%C(yellow)%h%C(reset) %C(blue)%ad%C(reset) %C(green)%d%C(reset) %s %C(dim blue)(%an)%C(reset)"
-
--oneline压缩每条记录为一行,避免换行干扰图形结构 -
--all必须加,否则只显示当前分支,跨分支差异直接看不见 -
--simplify-by-decoration过滤掉无标签/无分支引用的中间提交,大幅减少噪音(尤其 rebase 后) - 日期用
%ad+--date=short比默认更紧凑;%d显示分支/标签名,一眼定位关键节点
Windows/macOS/Linux 上怎么装个靠谱的 GUI 工具?
别用 GitHub Desktop —— 它隐藏了底层 reflog 和 detached HEAD 状态,遇到 cherry-pick 冲突或 reset 回退后,图形会断连、丢提交。
推荐两个真正反映 Git 内部状态的工具:
当用户提及 GitHub URL,或要求分析、审查、探索或理解任意 GitHub 项目、仓库或代码库时,请使用此技能。触发条件包括以下短语:“分析这个项目”、“看看这个仓库”、“analyze this repo”、“what does this project do”,或消息中包含任何 github.com URL。
- GitKraken:免费版足够用,支持拖拽 rebase、可视化 cherry-pick 范围,右键提交能直接对比工作区/暂存区/父提交三个版本;注意关闭「Auto-fetch」,否则远程分支频繁刷新会让图形跳变
-
qgit(Linux/macOS)或 tig(终端 GUI):轻量、无后台进程,
tig启动快,按d键直接看当前选中提交的 diff,按2切到文件树视图查某次 merge 引入了哪些文件变更
为什么 gitk 一打开就卡住或者只显示 master?
gitk 默认只加载最近 100 个提交,且不自动 fetch 远程分支。复杂项目里,feature 分支可能在 origin 上但本地没 tracking,或者提交历史超过 500 条,它就卡在“Loading…”。
- 启动时加参数:
gitk --all --max-count=2000,强制加载全部分支和最多 2000 条提交 - 先运行
git fetch --all,再开gitk,否则 origin/xxx 分支压根不会出现在图里 - 如果仓库启用了 sparse-checkout 或 partial clone,
gitk无法解析缺失对象,会静默失败——此时必须切到完整克隆仓库操作
diff 两个分支时图形化显示具体改了哪些文件?
git diff branch-a..branch-b --name-status 只给文字列表,看不出哪些文件是新增、重命名还是仅修改。想图形化比对,得靠 git difftool 配合外部工具。
- 先配好工具:比如 VS Code,运行
git config --global diff.tool vscode,再git config --global difftool.vscode.cmd 'code --wait --diff $LOCAL $REMOTE' - 执行
git difftool -d branch-a...branch-b(注意是三个点),它会拉出双栏界面,左边是 branch-a 的最新提交,右边是 branch-b 相对于 merge base 的变更 - 关键细节:三个点
...表示 “branch-b 有但 branch-a 没有的提交”,两个点..是 “所有从 branch-a 到 branch-b 的提交”,图形差异结果完全不同
分支越深、merge 越多,... 和 .. 的 diff 结果偏差越大,这里最容易漏掉共享基础之外的变更。

















