我使用SHA删除了一个远程分支上的提交,删除了7个过去的提交

时间:2018-05-25 09:56:32

标签: git github

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

有没有办法恢复这些提交或撤消此更改?感谢。

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

2 个答案:

答案 0 :(得分:1)

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

请注意,如果您可以登录服务器,则可以检查服务器是否有reflog,或者git gc尚未实际删除提交。这两种情况都不太可能,但并非不可能(特别是在使用&#34;隔离区&#34;对于传入提交的较新的Git版本中,这部分是为了避免在之后立即运行git gc每次收到上传)。

如果您没有git fetch将这些提交添加到您自己的存储库中,以便它们永远不会存在于您自己的存储库中,那么这些提交将继续存在于您自己的存储库中。他们无法从他们从未存在的地方找回。

只留下另外一个地方,虽然它是一个很大的地方:从服务器上做过git fetch的其他每台计算机。你可能会很幸运,发现这些机器之一有提交。如果是这样,您可以从该计算机检索提交。

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

答案 1 :(得分:0)

您可以使用:

$ git reflog origin/branch-name

它将打印origin / branch-name的任何移动并获取相应的提交编号。

使用:

$ git show commit-number

您可以检索上次丢失的提交,然后将其签出以重新创建新分支。