git - 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"
文件。
提前非常感谢!
解决方案
你可以试试 GitHub 的 reflog。
摘自:
- https://objectpartners.com/2014/02/11/recovering-a-commit-from-githubs-reflog/
- https://medium.com/git-tips/githubs-reflog-a9ff21ff765f。
首先,使用 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
推荐阅读
- php - 使用 multipart/form-data POST 请求时从 ConnectWise API 获得无效响应
- r - 如何从字符串列表中创建对出现的二元关系矩阵?
- graph - 首次访问的节点形成一棵在 BFS 和 DFS 中具有相同边数的生成树
- symfony - 无法使用 SMTP 服务器使用 symfony 和 swiftmailer 发送电子邮件
- r - R:日期向量中的日期是什么:日期还是数值?(x[i] 和 i 之间的差异)
- sql - SQL Server - 使用 STRING_SPLIT 函数拆分多行?
- 3d - 如何去除 PCL 中的异常点以进行基于区域增长的表面检测
- ios - 重定向到 /login 后如何再次登录而没有任何 http 错误
- ios - 如何调试 Ionic iOS 滑动手势问题
- objective-c - 无法为文本赋值