我使用此命令git push -f https://github.com/userid/reponame.git <commit-sha>:<branch-name>
来推送远程提交。但是,删除了该分支的7个先前提交。
有没有办法恢复这些提交或撤消此更改?感谢。
编辑:我使用的SHA是一个合并提交,我没有在我推动之前获取该分支。
答案 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
您可以检索上次丢失的提交,然后将其签出以重新创建新分支。