Git:如何在没有之前版本的情况下撤销我的最后一次“git push -f”?

3

我在Github上有一个repo1,拥有最新的干净版本(我们称之为"latest-version")。

我进行了克隆,但是...

我执行了以下操作:

rm -fr .git
git init
git remote add origin <repo1 url>"

然后,我修改了各种文件,并运行了 "git push -f origin master" 来覆盖所有文件。

在本地的 .git 目录中没有以前的历史记录/日志,我该如何删除我最后一次推送,以便我可以获取 repo1 上的 "latest-version" 文件?

也就是说,我希望我没有运行上述任何命令,只有最初的 "latest-version" 文件。

非常感谢!


你不能删除 .git 目录,然后添加远程仓库,因为你的项目不再是一个 git 仓库了。很可能,在不同的目录中运行了 rm -fr .git 命令,导致其没有任何效果。因此,在这个问题中它是无关紧要的。 - SIREN
嗨SIREN,抱歉,我刚刚编辑了一下,加入了我之前运行的“git init”。 - Steve
你是否可以物理访问你的远程代码库? - SIREN
1
我检查了github仓库中的每个文件,但在历史记录中找不到任何先前的版本。看起来,我可能已经完全用我的推送覆盖了所有以前的提交。由于我仍然有一个原始克隆的副本,它没有被修改过,所以我只需运行“git push -f origin master”,它就会放置“最新版本”。我承认我犯了愚蠢的错误,但如果我没有原始克隆的干净副本,最好的撤消和删除我的错误提交的方法是什么? - Steve
1
GitHub 可能 有一个推送之前的存储库备份。但也可能没有。一般来说,你付给他们的钱越多,他们就会在他们这边存储更多的东西,以便在你搞砸时拯救你的屁股。 :-) 所以如果你有一个免费账户,那么祝你好运;如果你有一个付费账户,请与他们的某个人交谈。即使你有免费账户,由于效率问题,他们不经常清理东西,所以你可能能够恢复。但你需要找到提交哈希 ID。 - torek
1个回答

4
你可以尝试使用GitHub的 reflog。
引用自: 首先,使用 GitHub 的 Events API 检索提交 SHA。
$ curl https://api.github.com/repos/<user>/<repo>/events

这将返回一个JSON响应,您可以通过阅读来查找丢失分支的最后一次提交。使用提交消息和大致时间缩小搜索范围。
接下来,使用GitHub的Refs API创建一个指向该提交的新分支:
$ curl -i -H "Accept: application/json" -H "Content-Type: application/json" -X POST -d '{"ref": "refs/heads/your-new-branch", "sha": "384f275933d5b762cdb27175aeff1263a8a7b7f7"}' https://api.github.com/repos/<user>/<repo>/git/refs

上面JSON中的“ref”是我们要创建的Git引用,它必须采用refs/heads/your-new-branch格式,其中your-new-branch是我们想在Git中创建的分支名称。 “sha”是我们希望这个新分支指向的提交。 现在,如果您在GitHub中打开存储库,您将看到新分支,并且执行git fetch将检索该新分支到您的本地存储库。 可能需要进行身份验证。这里是认证文档https://docs.github.com/en/rest/overview/resources-in-the-rest-api#authentication

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接