git commit 后pull(且merge),如何查看与remote的区别?
11 2025-10-23 09:17
你已经
git commit
了本地修改,又执行了 git pull
(默认做了一次 merge),现在仓库里可能长这样:复制
* 5f3a2d8 (HEAD -> main) Merge branch 'origin/main' into main
|\
| * 9d8e4c2 (origin/main) 远程新提交
* | 7c1b3a0 你的本地提交
|/
* 4f6b9c1 共同祖先
此时再想看「我和远程还有什么区别」就得分两步:
-
先更新远程索引
bash
复制
git fetch origin
-
比较「当前合并后的 HEAD」与「远程最新」
bash
复制
# 文件级差异
git diff HEAD..origin/main
# 提交级差异
git log HEAD..origin/main --oneline # 远程比你多的
git log origin/main..HEAD --oneline # 你比远程多的(通常应为空)
-
如果只想看「合并后到底改了哪些文件」
bash
复制
git diff --name-status HEAD..origin/main
一句话总结
merge 完成后,本地与远程的区别仍然用
merge 完成后,本地与远程的区别仍然用
bash
复制
git fetch origin
git diff HEAD..origin/main
来看;
如果这条命令没有输出,就说明你们完全一致。
如果这条命令没有输出,就说明你们完全一致。
查看不全?
“不全” 99 % 是因为 HEAD 与 origin/xxx 已经指向同一 commit,diff 自然为空。
先确认下面 4 件事,就能 100 % 看到“到底差在哪”。
先确认下面 4 件事,就能 100 % 看到“到底差在哪”。
-
确认自己坐在哪个分支bash
-
复制
git status
第一行On branch xxx
就是当前分支,后面都用这个名字。 -
确认远程分支真的已更新到最新bash
-
复制
git fetch origin
只要看到From github.com/...
或* branch xxx -> FETCH_HEAD
就行,fetch 绝不改工作区。 -
确认本地与远程到底差几个 commitbash
-
复制
# 远程比你多的 git log --oneline HEAD..origin/xxx # 你比远程多的(正常应为空) git log --oneline origin/xxx..HEAD
如果两条都为空,说明完全同步,diff 自然“啥也看不到”。 -
如果只想看“文件差异”而不管 commitbash
-
复制
# 统一 diff(patch 形式) git diff HEAD..origin/xxx # 只列文件名与增删改标识 git diff --name-status HEAD..origin/xxx # 图形化浏览(有 GUI 时) git difftool HEAD..origin/xxx
常见“错觉”对照表
表格
复制
现象 | 原因 | 解决 |
---|---|---|
git diff HEAD..origin/xxx 无输出 |
两者已同一快照 | 用 git log 确认 commit 是否一致 |
git log HEAD..origin/xxx 有提交,但 diff 为空 |
远程只有“空合并”或“纯重排” | 正常,说明文件内容没变 |
git fetch 后仍提示 “up to date” |
真的没新数据 | 到 GitHub/GitLab 网页上看最新 commit 时间 |
一句话:
先 fetch,再用
先 fetch,再用
bash
复制
git log --oneline HEAD..origin/xxx # 看 commit
git diff HEAD..origin/xxx # 看文件
只要还有差异,上面两条命令一定至少有一条有输出;如果都没有,就是“完全同步”,不是“显示不全”。
全部评论