首页 > 解决方案 > git:如何在没有以前版本的情况下撤消我上一个“git push -f”?

问题描述

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

我克隆了它,但是...

我做了:

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

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

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

也就是说,我希望我没有运行上述任何命令而只拥有原始"latest-version"文件。

提前非常感谢!

标签: gitgithub

解决方案


你可以试试 GitHub 的 reflog。

摘自:

首先,使用 GitHub 的事件 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 ref,它必须是 形式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


推荐阅读