首页 > 解决方案 > 我使用 SHA 在远程分支上推送了一个提交,该 SHA 删除了 7 个过去的提交

问题描述

我使用此命令git push -f https://github.com/userid/reponame.git <commit-sha>:<branch-name>在远程推送提交。但是,这删除了该分支的 7 个先前提交。

有什么方法可以恢复这些提交或撤消此更改?谢谢。

编辑:我使用的 SHA 是一个合并的提交,在我推送之前我没有获取那个分支。

标签: gitgithub

解决方案


如果您推送到的服务器没有启用 reflogs(这是大多数服务器的通常默认设置),那么这些提交将从服务器中消失,至少就 Git 本身而言。(服务器可能有备份,这些备份可能有某种形式的提交,但是否如此以及如何恢复它们超出了这个社区的范围:-)——你需要serverfault.com。)

请注意,如果您可以登录到服务器,您可以幸运地检查服务器是否有 reflogs,或者git gc还没有实际删除提交。这两种情况都不太可能,但并非不可能(尤其是在使用“隔离区”进行传入提交的较新 Git 版本中,这样做部分是为了避免git gc在每次收到上传后立即运行)。

如果您没有将git fetch这些提交编辑到您自己的存储库中,因此它们从未存在于您自己的存储库中,那么这些提交将继续不存在于您自己的存储库中。它们无法从它们从未存在过的地方恢复。

这只剩下一个地方可以查看,尽管它是一个很大的地方:所有其他曾经git fetch从服务器执行过操作的计算机。 您可能会很幸运,发现其中一机器具有提交。如果是这样,您可以从该机器检索提交。

如果没有,提交将永远消失。


推荐阅读