在没有克隆历史的机器上撤消“git push -f”

在没有克隆历史的机器上撤消“git push -f”

那么,背景故事。我的硬盘在机器 A 上坏了。我几乎所有的工作都已经推送到 GitHub,在这方面一切都很顺利,除了一个存储库。所以,在意识到这一点后,我发现,“嘿,很酷,我实际上刚刚将最近更改的 tar 文件发送给了 Guy Guyerson。”所以我得到了 tar 文件,然后做了一些愚蠢的事情/展示了我是多么的 GitHub 菜鸟。我没有克隆存储库,然后添加更新的文件,然后推送,而是想:我应该能够直接推送这些文件,没问题。所以我 git init,添加远程,然后推送,但它不起作用......因为合并很奇怪。我知道合并很糟糕,所以我决定强制更新这些文件并推送 -f。但是,由于这是一个新的 .git 目录,推送会覆盖所有内容,我丢失了整个提交历史记录,并且所有不在 tarball 中的文件都消失了。

鉴于当前本地版本不记得之前的所有提交,有没有办法回到那个状态?我有它覆盖的哈希的开头,但远程现在也没有那个提交的记忆。

我认为硬盘崩溃可能又造成了另一个受害者,因为我的沮丧情绪已经达到了顶点,我只想趁着这台旧机器上还有更新的时候推送更新。

谢谢,扎克

答案1

GitHub 的在线版本确实会保留这些旧提交的记录,我只是不知道如何访问它们。对于任何未来的读者:如果您有意外覆盖的提交 ID,您可以像这样访问它:

https://github.com/userName/repoName/tree/commitNum

从那里,您可以使用树/分支下拉菜单从该提交创建一个新分支。然后可以将其克隆到本地目录,然后您可以从那里进行合并等。

相关内容