git commit 后pull(且merge),如何查看与remote的区别?

22 2025-10-23 09:17

你已经 git commit 了本地修改,又执行了 git pull(默认做了一次 merge),现在仓库里可能长这样:
 
复制
*   5f3a2d8  (HEAD -> main) Merge branch 'origin/main' into main
|\
| * 9d8e4c2  (origin/main) 远程新提交
* | 7c1b3a0  你的本地提交
|/
* 4f6b9c1  共同祖先
 
此时再想看「我和远程还有什么区别」就得分两步:

  1. 先更新远程索引
bash
 
复制
git fetch origin
 
  1. 比较「当前合并后的 HEAD」与「远程最新
bash
 
复制
# 文件级差异
git diff HEAD..origin/main

# 提交级差异
git log HEAD..origin/main --oneline   # 远程比你多的
git log origin/main..HEAD --oneline   # 你比远程多的(通常应为空)
 
  1. 如果只想看「合并后到底改了哪些文件
bash
 
复制
git diff --name-status HEAD..origin/main
 

一句话总结
merge 完成后,本地与远程的区别仍然用
bash
 
复制
git fetch origin
git diff HEAD..origin/main
 
来看;
如果这条命令没有输出,就说明你们完全一致。

 

查看不全?

“不全” 99 % 是因为 HEAD 与 origin/xxx 已经指向同一 commit,diff 自然为空。
先确认下面 4 件事,就能 100 % 看到“到底差在哪”。

  1. 确认自己坐在哪个分支
    bash
     
  • 复制
    git status
     
    第一行 On branch xxx 就是当前分支,后面都用这个名字。
  • 确认远程分支真的已更新到最新
    bash
     
  • 复制
    git fetch origin
     
    只要看到 From github.com/...* branch xxx -> FETCH_HEAD 就行,fetch 绝不改工作区
  • 确认本地与远程到底差几个 commit
    bash
     
  • 复制
    # 远程比你多的
    git log --oneline HEAD..origin/xxx
    
    # 你比远程多的(正常应为空)
    git log --oneline origin/xxx..HEAD
     
    如果两条都为空,说明完全同步,diff 自然“啥也看不到”。
  • 如果只想看“文件差异”而不管 commit
    bash
     
  1. 复制
    # 统一 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,再用
bash
 
复制
git log --oneline HEAD..origin/xxx     # 看 commit  
git diff HEAD..origin/xxx              # 看文件
 
只要还有差异,上面两条命令一定至少有一条有输出;如果都没有,就是“完全同步”,不是“显示不全”。

 

 

 

 

 

 

 

 

 

 

 

 

 

全部评论

·