Git当前分支推送被拒绝,如何查看本地与远端差异并选择合适方案?
Git推送被拒差异查看方法与方案选择
你遇到的报错本质是本地分支的提交进度落后于对应远端分支,Git为了避免覆盖远端已有更新默认拦截了推送操作,你可以按照以下步骤先查看差异再选择处理方案:
第一步:同步远端最新元数据(不会修改本地任何代码)
先执行命令拉取远端的最新提交索引,确保你看到的差异是最新的:
git fetch origin
第二步:查看本地与远端分支的差异
将以下命令中的<本地分支名>、<远端分支名>替换为你实际使用的分支名称即可:
- 查看所有文件的行级详细差异:
git diff <本地分支名> origin/<远端分支名> - 仅查看存在差异的文件列表,不展示具体改动内容:
git diff --name-only <本地分支名> origin/<远端分支名> - 查看两端的提交记录差异,直观区分本地独有、远端独有提交:
git log --left-right --graph --oneline <本地分支名>...origin/<远端分支名>
命令输出中<开头的记录为本地独有、还未推送到远端的提交,>开头的记录为远端独有、你本地还没有的提交。
方案选择建议
根据你查看的差异结果选择对应处理方式即可:
- 如果远端存在其他同事的有效提交,且你是在多人协作的公共分支上工作:优先选择
git pull --rebase操作,该操作会把你本地的提交依次接到远端最新提交的后面,不会产生冗余的合并提交,也不会覆盖他人代码。如果执行过程中提示冲突,手动解决冲突后执行git rebase --continue即可,完成后再执行git push就能正常推送。 - 如果确认远端的提交是无效内容,或者该分支仅为你个人维护、没有其他人提交改动:可以选择强制推送,但不要直接用
git push -f,推荐使用更安全的git push --force-with-lease,该命令会先校验你拉取索引后远端有没有新的提交,如果有就会拦截推送,避免覆盖其他人刚提交的内容。
注意:多人协作的公共分支(如主分支、迭代开发分支)禁止使用任何强制推送操作,否则会直接覆盖其他人的提交,导致团队代码丢失。
内容的提问来源于stack exchange,提问作者Nikita Mishanin
相关产品推荐
相关产品推荐

