You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

解决Git推送拒绝问题后,执行命令导致README.md消失求助

问题原因与解决办法

为啥README.md没了?

你最后一步用git push -f origin main是核心问题——强制推送会直接用本地分支覆盖远程分支。而你之前的merge、rebase操作没把本地新增的README.md正确合并到包含远程最新提交的分支里,导致本地main分支其实没有这个文件(或者你的本地提交被远程内容覆盖了),强制推送后远程main反过来覆盖了你的本地仓库,自然README.md就消失了。

拆解你操作里的问题点:

  • git merge main:你刚fetch了远程main,但本地main分支没更新,这步合并的是你自己本地的main分支,等于没合并任何远程新内容,完全没用。
  • git rebase tmp:如果这时候你没切换到本地main分支,或者tmp分支(远程拉下来的)比本地main新,rebase会把你的本地提交放到tmp后面;如果过程中出了冲突你没处理,rebase会中断,你以为没生效,其实分支状态已经乱了。
  • 最后强制推送时,你的本地main要么没包含README.md,要么被远程分支内容覆盖,导致文件丢失。

怎么找回README.md?

  1. 先查Git提交历史,找到包含README.md的那笔提交:
git log --all -- README.md
  1. 拿到对应的提交哈希后,把文件恢复到本地:
git checkout <提交哈希> -- README.md
  1. 重新正确处理远程分支冲突:
    • 拉远程最新内容:git fetch origin main
    • 切回本地main分支:git checkout main
    • 推荐用rebase合并(提交记录更干净):git rebase origin/main,遇到冲突就解决,然后git add README.md,再git rebase --continue
    • 也可以用merge:git merge origin/main,解决冲突后提交
    • 最后正常推送:git push origin main

以后遇到「! [rejected] main -> main (fetch first)」该怎么做?

  • 别上来就强制推送,先执行git fetch origin main拉取远程最新内容
  • 要么用git rebase origin/main把本地提交放到远程提交之后,解决冲突再推送;要么用git merge origin/main合并后推送
  • 只有你确定自己分支内容绝对正确,且必须覆盖远程时,再用git push -f,这步一定要谨慎,会丢远程的提交记录。

内容的提问来源于stack exchange,提问作者user19816368

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 08:15:35