通过强制推送丢失的被覆盖git提交恢复

6
我在远程服务器上编写了一个README.md文件,完成后使用git push origin master命令不小心强制推送到了远程,导致README.md文件丢失。
有没有办法可以找回这个提交?我写了一个非常长的README.md文件,真的很想看看能否找回它:(
我尝试使用git fsck查找,但是无法找到关于README.md的提交记录,该文件之前已经从远程服务器上的github.com提交过。

你在 GitHub 或者自己的服务器上写 README.md 文件了吗? - pktangyue
@pktangyue 它在 Github 服务器上,显示在提交部分。 - Ali
你可以前往Github的主页查看是否有你丢失的提交信息。 - pktangyue
1
在“公共活动”页面中,您可能会看到类似于以下内容: XXX 在 XX/XXX 推送到主分支 d506bb1 更新 README.md。而 d506bb1 就是您丢失的提交。 - pktangyue
多亏了你,我在那里找到了它:D - Ali
显示剩余2条评论
2个回答

8

如果在某个工作副本中存在该文件,请前往该仓库并使用git reflog查找包含该文件的修订版本,使用git checkout切换到该修订版本(不属于任何分支)。然后,您可以将文件复制到任何想要的位置。

如果服务器是裸库,则它可能仍然是服务器上的对象,但是没有任何git fetch类型的操作会将其复制到任何其他仓库,因为没有对它的引用。在这种情况下,您需要访问裸库以直接运行git fsck


我在本地机器上的 git reflog 上没有找到任何信息 :(,我尝试了 git fsck,但还没有全部检查完,因为有很多信息 :( - Ali
我在我的活动页面上翻找,发现了这个文件 :D - Ali

7
在 GitHub 的“公共活动”(Public Activity)中,您可能会看到类似于以下内容的东西:
XXX pushed to master at XX/XXX 
d506bb1 Update README.md. 

这里是你丢失的代码提交 d506bb1


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接