恢复已删除文件后推送到GitHub失败,如何保留文件并成功推送?
解决Git推送冲突并保留恢复文件与新增文件的方法
先找回丢失的文件
首先通过git reflog查看本地所有操作记录,找到你之前提交"restore deleted file"对应的提交ID(比如输出里类似abc123 HEAD@{2}: commit: restore deleted file的那行,abc123就是目标ID)。
方法一:用Cherry-Pick重新应用恢复提交
- 确保本地分支已拉取远程最新内容:
git pull - 将之前的恢复提交应用到当前最新分支上:
git cherry-pick <你的恢复提交ID> - 如果出现冲突,打开冲突文件手动保留你需要的内容,然后执行:
git add . git cherry-pick --continue - 最后推送到远程:
git push
方法二:撤销Pull操作后用Rebase拉取(仅适用于Pull后未做其他修改)
- 回到Pull之前的状态,此时你的恢复文件和新增文件还在:
git reset --hard HEAD@{1} - 用变基方式拉取远程内容,将本地提交放在远程最新提交之后:
git pull --rebase - 若出现冲突,解决后执行:
git add . git rebase --continue - 完成变基后推送:
git push
为什么之前Pull后文件丢失?
你本地提交的恢复操作,位置在远程分支最新提交的前面,直接执行git pull会触发自动合并。如果远程分支中该文件处于删除状态,合并过程中Git可能默认保留远程的文件状态,导致你的恢复内容被覆盖。而用Cherry-Pick或Rebase的方式,能确保你的本地修改被正确叠加到远程最新内容之上,不会被覆盖。
内容的提问来源于stack exchange,提问作者showkey
相关产品推荐
相关产品推荐

