提交本地代码后Github仓库中README.md丢失的求助
嘿,我碰到过好几个和你一模一样的情况!这事儿本质是本地仓库和远程仓库的提交历史完全脱节了——远程原本有18次README的提交记录,但你的本地仓库根本没同步这些历史,当你把本地代码推上去时,Git直接用本地的全新提交覆盖了远程的旧历史,导致那些README的提交被隐藏起来了,不是真的彻底丢了,咱们一步步把它找回来:
第一步:定位被隐藏的远程提交记录
先在本地仓库里运行这两个命令,把远程仓库所有的提交记录(包括被覆盖的那些)都调出来:
git fetch origin git reflog show origin/main
(要是你的主分支是master就把main换成master)
运行后你会看到一串带哈希值的记录,前面几条就是你之前提交README的历史。你可以用git show <哈希值>来查看某个提交的内容,确认是不是包含你要的README.md。
第二步:把README.md提取到本地
找到包含README.md的那个提交哈希后,运行这条命令,把该提交里的README.md拉到你的本地工作区:
git checkout <哈希值> -- README.md
这时候你打开本地文件夹,就能看到消失的README.md了。
第三步:重新提交并推回远程
接下来把这个README.md重新加入版本控制,提交后推送到远程:
git add README.md git commit -m "恢复丢失的README.md文件" git push origin main
等推送完成,你去GitHub仓库里看,README.md就回来了,同时你之前推送的几百个文件也都在。
可选:找回完整的18次提交历史
如果你想把之前那18次README的提交记录也恢复回来,试试这个方法:
- 先建一个新分支,把远程被覆盖前的历史拉下来:
git checkout -b old-readme-history origin/main@{1}
(origin/main@{1}指的是远程main分支被覆盖前的状态,要是不对就看刚才reflog里的其他记录)
2. 把当前主分支的内容合并到这个新分支里:
git merge main
- 如果出现冲突,手动解决后提交,然后把这个分支推回远程替换主分支:
git push -f origin old-readme-history:main
之后切换回main分支拉取最新内容,你就能看到完整的18次README提交记录了。
最后提醒一句:以后如果本地和远程的提交历史不一样,尽量先git fetch再git merge或者git pull,别直接强制推送,不然很容易覆盖掉远程的历史记录哦!
内容的提问来源于stack exchange,提问作者Chaotic




