Git推送前如何检查本地仓库与上游仓库的差异?
如何在Git Push前确认即将推送的内容
Git难上手的原因之一,就是得在工作区、暂存区、本地仓库、上游仓库这四个区域间来回折腾。你已经知道用git diff看工作区和暂存区的差异,用git diff --cached看暂存区和本地仓库的差异,那要确认本地仓库和上游仓库的差异、避免误推,这些方法可以用:
1. 先看未推送的提交列表
想知道本地分支比上游多了哪些还没推送的提交,直接用:
git log --oneline upstream/你的分支名..你的分支名
--oneline会让输出变成简短的一行式commit信息,扫一眼就能知道要推的是哪些提交。如果怕上游有你本地没有的更新(避免推送时冲突),可以反过来写:
git log --oneline 你的分支名..upstream/你的分支名
2. 查看具体的文件改动
要是想看到这些提交对应的实际文件变化,用git diff对比本地和上游分支:
git diff upstream/你的分支名...你的分支名
这里的三个点很关键,它只会显示本地分支独有的那些提交里的改动;如果用两个点,会显示两个分支的所有差异(包括上游新增的内容),按需选择就行。
另外你提到的git merge --nocommit后的“隐形”改动,这类属于未提交的工作区/暂存区修改,push前一定要用git status先扫一眼当前状态,再用git diff看工作区改动、git diff --cached看暂存区改动——未提交的内容不会被push,但要是之后不小心提交了,下次推送就会带上,所以务必提前确认清楚。
3. 模拟推送验证
用--dry-run参数模拟推送,Git会告诉你这次推送会做什么动作,但不会真的把内容推上去,能帮你提前发现分支不对、冲突之类的问题:
git push --dry-run
补充:该问题已有相关讨论,核心方向包括:
- 如何查看即将推送的内容
- 列出尚未推送到origin的Git提交
- 预览Git推送操作
- 列出未推送的Git提交(本地存在但origin没有的)
内容的提问来源于stack exchange,提问作者Steve Summit
相关产品推荐
相关产品推荐

