为什么git status要求提交其他开发者的变更,且执行git push时推送被拒绝?
问题根因
你当前遇到的所有提示都源于两个核心问题:
- 你的本地
master分支和远程origin/master分支已经分叉:远程有2个你本地没有的新提交,你本地有1个远程没有的新提交 - 你之前执行过
git pull触发了分支合并,冲突解决后没有完成最终的合并提交,导致一直处于未完成的合并状态
你后续push被拒绝,也是因为本地分支没有包含远程的最新提交,远程仓库不允许你直接覆盖已有的远程新提交,要求你先整合远程变更再推送。
疑问解答
1. 不属于你的提交是怎么产生的?
这2个提交是你Fork的仓库(origin)上的新增内容,可能是其他协作者推送到了你的Fork仓库,也可能是你之前同步上游原仓库的更新后推到了自己的Fork中,这些提交是在你克隆仓库之后新增的,所以你本地没有对应记录。
2. 为什么需要提交“不是我做出的变更”?
Git提示你提交的并不是其他人的变更,是合并流程的收尾提交:你执行pull拉取远程内容时,Git需要把远程的2个新提交和你本地的1个提交合并到一起,你已经解决了所有合并冲突,但没有执行最终的提交来结束合并流程,所以Git才会提示你先完成提交,关闭当前的合并状态。
3. 是否要先提交再推送我的变更?
是的,你可以根据需求选择以下两种操作方案:
方案1:保留合并提交(操作最简单)
- 先确认当前工作区内容符合预期:你新建的文件存在、所有合并冲突都已经处理完毕
- 执行
git commit,Git会自动生成合并提交的默认说明,直接保存退出即可完成合并 - 执行
git push origin master就能正常推送你的变更
方案2:保持提交线干净,不产生额外合并提交
如果你不希望提交记录里多一条冗余的合并记录,可以先终止当前未完成的合并,用rebase方式整理提交:
- 执行
git merge --abort终止当前的未完成合并流程 - 执行
git pull --rebase origin master,Git会自动把你本地的1个提交移到远程2个新提交的后面,不会产生合并提交 - 执行
git push origin master即可完成推送
内容的提问来源于stack exchange,提问作者Leo34
相关产品推荐
相关产品推荐

