如何比较本地分支与远程分支的差异
先 git fetch 刷新远程引用,再 git diff main origin/main 看文件差异、git log main..origin/main 看远程多出的提交、git log origin/main..main 看本地多出的提交。git status 也会提示领先/落后数。
先 git fetch 刷新远程引用,再对比:看文件差异 git diff main origin/main;看提交差异用 git log main..origin/main(远程有的我没的)和 git log origin/main..main(我有的远程没的)。日常最省事的是 git status,首行直接告诉你领先/落后几个提交。
对比提交
git fetch origin
git log main..origin/main --oneline # 远程多出的提交
git log origin/main..main --oneline # 本地多出的提交
git log --left-right --oneline main...origin/main # 双向对比(< 本地 > 远程)
对比文件改动
git diff main origin/main # 完整 diff
git diff main origin/main --stat # 只要统计
git diff main origin/main -- src/app.js # 单个文件
最省事:status 与 -vv
git status # "Your branch is ahead of 'origin/main' by 2 commits"
git branch -vv # 每个分支的跟踪关系与 ahead/behind
注意 status 的 ahead/behind 基于上次 fetch 的引用,先 fetch 才准。
常见问题(FAQ)
Q:三点 ... 和两点 .. 在 diff/log 里有什么区别?
log A..B:B 有而 A 没有的提交;log A...B:两者各自独有的提交(对称差)。diff A..B 同 diff A B;diff A...B 是"共同祖先到 B"的差异(看 B 分支引入了什么)。
Q:不 fetch 能对比吗?
对比的是本地的远程跟踪引用(origin/main),不 fetch 就是过期数据。git fetch 随时可跑、无副作用。
Q:图形化工具有推荐吗?
VS Code 的 GitLens、JetBrains 的 Git 工具窗都能直观对比分支;命令行党用 git log --graph --oneline main origin/main 看分叉图。