应使用git diff origin/main...head(三点)而非双点,因三点自动计算共同祖先后对比净变更,真实反映本地独有改动;双点仅机械对比快照,易漏本地已提交但远程未含的修改。

git diff origin/main...HEAD 能看到本地 vs 远程的净变更
直接运行 git diff origin/main...HEAD(注意是三个点),Git 会以两个分支的共同祖先为基准,对比 origin/main 和 HEAD 各自的独立改动。这比双点语法(git diff origin/main..HEAD)更准确——后者只显示从 origin/main 到 HEAD 的“单向路径”,可能漏掉你本地已提交但远程尚未包含的修改。
常见误操作:用双点语法却以为看到了“全部差异”。比如你在本地提交了 A→B→C,而 origin/main 停在 A,git diff origin/main..HEAD 只显示 C 相对于 A 的变化,但若中间 B 有回滚逻辑,就容易误判。
- 三个点语法强制找最近公共提交(merge base),结果更贴近真实协作场景
- 如果提示 “fatal: ambiguous argument”,说明
origin/main尚未 fetch,先执行git fetch - 加
--name-only可快速列出哪些文件有差异:git diff origin/main...HEAD --name-only
VSCode 内置比较:右键文件 → “Compare with Branch”
在 VSCode 的资源管理器中右键一个已修改的文件,选择 Compare with Branch...,然后输入 origin/main(或你实际要对比的远程分支名)。它会启动内置 diff 视图,左侧是远程版本,右侧是你的工作区内容。
这个操作不依赖 Git 状态是否干净,哪怕你有未暂存的修改也能比对;但它只展示当前文件,无法一次性看全项目变更。
批量替换指定目录下所有 Git 仓库的远程地址(remote URL)。 当用户需要将 Git 仓库从一个服务器迁移到另一个服务器时使用。 触发词:git remote 替换、git url 批量修改、git 仓库迁移、更换 git 地址、批量修改 remote url。
- 若右键菜单没有该选项,检查是否已安装官方 Git 扩展(默认启用)
- 对比时注意顶部状态栏显示的是 “Working Tree” 还是 “Index” —— 前者含未暂存更改,后者仅暂存区
- 对冲突文件,VSCode 会自动高亮冲突块,并提供“Accept Current Change”等快捷按钮,但这些只是编辑辅助,不替代手动判断逻辑
git log --cherry-pick --oneline origin/main...HEAD 查哪些提交没同步到远程
当你想确认“我本地到底多了哪些提交还没推上去”,用 git log --cherry-pick --oneline origin/main...HEAD 最直接。它会过滤掉那些在 origin/main 中已存在的等价提交(即内容相同、哈希不同但语义一致的提交),只列出真正独有的本地提交。
这个命令对 rebase 后的分支特别有用:rebase 会重写提交哈希,双点语法会把所有提交都列出来,而 --cherry-pick 能识别出哪些其实是“重复劳动”。
- 输出为空,说明本地无新提交,当前冲突大概率来自未提交的修改或 stash
- 若看到大量提交,但你知道其中部分已被合入远程,可能是 fetch 滞后,先
git fetch再重试 - 配合
-p参数可展开每个提交的 patch:git log -p --cherry-pick origin/main...HEAD
别跳过 git status -v:它直接告诉你差异行数和文件状态
运行 git status -v(-v 表示 verbose),Git 会在底部显示类似这样的摘要:
Unmerged paths: both modified: src/utils.js Changes to be committed: new file: README.md Changes not staged for commit: modified: package.json
关键在最后一行:“Unmerged paths” 是冲突文件的明确信号;“Changes not staged” 说明你有未暂存的本地修改,它们会影响后续 merge/pull 行为——即使没冲突,也会被 Git 拒绝合并。
- 很多冲突其实源于忘记
git add已解决的冲突文件,导致git commit失败 -
git status -v不显示具体代码差异,但能快速定位“问题在哪一层”:是未暂存?未提交?还是真冲突? - 如果看到 “Your branch is ahead of 'origin/main' by X commits”,说明你本地有提交未推送,此时
git pull很可能触发 fast-forward 失败,需先处理本地历史
--cherry-pick 日志、git status -v 这四者组合使用,才能覆盖从宏观到微观的全部比对需求。










