运行git push -u origin master提示master->master被拒报错如何解决
报错核心原因
执行git push -u origin master时出现非快进推送拒绝,本质是远程master分支存在本地分支没有的提交(通常是其他协作者先向该分支推送了新内容),Git默认阻止这类推送,避免直接覆盖远程已有提交造成代码丢失。
对应报错关键信息:
! [rejected] master -> master (fetch first) error: failed to push some refs to 'https://bitbucket.org/abyss_monarch/git-test.git' hint: Updates were rejected because the remote contains work that you do hint: not have locally. This is usually caused by another repository pushing hint: to the same ref. You may want to first integrate the remote changes hint: (e.g., 'git pull ...') before pushing again.
常规处理步骤(多人协作场景推荐)
这个方案会保留所有提交轨迹,不会改写历史,适合公共协作分支:
- 拉取远程分支最新内容并自动合并到本地分支:
git pull origin master - 处理合并冲突(如果出现):
命令执行后如果提示文件冲突,打开对应冲突文件,手动取舍代码,删除文件中自动生成的<<<<<<<、=======、>>>>>>>冲突标记,确认代码逻辑正确后,依次执行:git add <处理完的冲突文件路径>git commit -m "merge remote changes" - 重新推送:
合并完成无报错后,重新执行原推送命令即可:git push -u origin master
整洁提交历史方案(个人分支适用)
如果不想生成额外的合并提交、想要保持线性提交历史,可以用rebase模式拉取变更,注意不要在多人共用的公共分支用这个方案,否则会改写提交历史给其他协作者造成困扰:
- 拉取远程变更并将本地提交追加到远程最新提交之后:
git pull --rebase origin master - 处理rebase冲突(如果出现):
出现冲突时和前述步骤一样手动解决冲突,标记解决后不需要执行commit,直接执行:git add <处理完的冲突文件路径>git rebase --continue
重复这个步骤直到rebase流程走完 - 重新执行推送命令即可
操作注意事项
- 严禁未确认远程内容就直接加
--force参数强制推送,强推会直接覆盖远程分支的所有已有提交,很容易造成其他协作者的代码永久丢失 - 拉取远程变更前建议先执行
git status检查本地工作区,如果有未提交的零散修改,可以先执行git stash临时暂存修改,等pull/rebase操作完成后再执行git stash pop恢复修改,减少不必要的冲突 - 如果执行pull后提示分支关联配置异常,可以先执行
git branch --set-upstream-to=origin/master master完成本地分支和远程分支的关联,再重新拉取
内容的提问来源于stack exchange,提问作者Abyss_Monarch
相关产品推荐
相关产品推荐

