Git远程分支推送失败冲突解决:如何跳过远程不存在的文件完成剩余变更推送
解决Git推送冲突:跳过远程已删除文件的变更
这问题我碰到过好几次,本质是你本地的development分支没同步远程的文件删除操作,之后又修改了那些已经在远程消失的文件,Git自然会拦截推送——毕竟它不知道你是想恢复文件还是放弃修改。下面是一套能快速解决的步骤,还能保留你其他有效的变更:
1. 先备份本地提交(可选但推荐)
为了防止操作失误弄丢你的修改,先给当前本地development分支建个备份分支:
git branch backup-dev
之后如果出问题,随时可以切回这个分支找回内容。
2. 拉取远程最新状态并同步
用rebase的方式拉取远程development的最新变更,这样能把你的本地提交“挪”到远程最新提交的后面,方便处理冲突:
git pull --rebase origin development
执行后Git会提示冲突,告诉你哪些文件在远程已被删除但本地做了修改。
3. 处理冲突:接受远程的删除操作
对于那些远程已经删除、你本地又修改过的文件,直接用git rm告诉Git我们接受远程的删除,放弃本地对这些文件的修改:
# 单个文件 git rm 你修改的文件名 # 多个文件可以批量处理,比如匹配特定后缀 git rm *.txt
执行后,这些文件就会从你的本地暂存区和工作区移除,和远程保持一致。
4. 继续完成rebase
处理完所有冲突后,让Git继续完成rebase流程:
git rebase --continue
如果还有其他冲突,重复步骤3和4直到rebase完成。
5. 推送剩余变更到远程
现在你的本地development分支已经和远程完全同步,并且保留了所有非冲突的有效变更,直接推送即可:
git push origin development
补充说明
你之前执行git checkout <remote-origin>/development时,其实处于**游离头指针(detached HEAD)**状态,在这个状态下删除文件并推送后,你的本地development分支并没有自动同步这个删除操作——这就是冲突的根源。以后如果要在远程分支上做修改,最好先拉取到本地分支再操作,避免游离状态带来的同步问题。
内容的提问来源于stack exchange,提问作者Rpj




