![在没有克隆历史的机器上撤消“git push -f”](https://linux22.com/image/1496006/%E5%9C%A8%E6%B2%A1%E6%9C%89%E5%85%8B%E9%9A%86%E5%8E%86%E5%8F%B2%E7%9A%84%E6%9C%BA%E5%99%A8%E4%B8%8A%E6%92%A4%E6%B6%88%E2%80%9Cgit%20push%20-f%E2%80%9D.png)
那么,背景故事。我的硬盘在机器 A 上坏了。我几乎所有的工作都已经推送到 GitHub,在这方面一切都很顺利,除了一个存储库。所以,在意识到这一点后,我发现,“嘿,很酷,我实际上刚刚将最近更改的 tar 文件发送给了 Guy Guyerson。”所以我得到了 tar 文件,然后做了一些愚蠢的事情/展示了我是多么的 GitHub 菜鸟。我没有克隆存储库,然后添加更新的文件,然后推送,而是想:我应该能够直接推送这些文件,没问题。所以我 git init,添加远程,然后推送,但它不起作用......因为合并很奇怪。我知道合并很糟糕,所以我决定强制更新这些文件并推送 -f。但是,由于这是一个新的 .git 目录,推送会覆盖所有内容,我丢失了整个提交历史记录,并且所有不在 tarball 中的文件都消失了。
鉴于当前本地版本不记得之前的所有提交,有没有办法回到那个状态?我有它覆盖的哈希的开头,但远程现在也没有那个提交的记忆。
我认为硬盘崩溃可能又造成了另一个受害者,因为我的沮丧情绪已经达到了顶点,我只想趁着这台旧机器上还有更新的时候推送更新。
谢谢,扎克
答案1
GitHub 的在线版本确实会保留这些旧提交的记录,我只是不知道如何访问它们。对于任何未来的读者:如果您有意外覆盖的提交 ID,您可以像这样访问它:
https://github.com/userName/repoName/tree/commitNum
从那里,您可以使用树/分支下拉菜单从该提交创建一个新分支。然后可以将其克隆到本地目录,然后您可以从那里进行合并等。