如何在不使用 git reflog 的情况下恢复丢失的提交?

How to recover lost commits without using git reflog?

By somehow 我不小心强行推送了一个分支,我没有拉取只存在于远程的提交。

通常,发生这种情况时可以使用 git reflog 命令恢复,但这次丢失的提交仅在远程仓库中。

如何恢复那些只存在于 GitHub 存储库中的提交?

只需几个步骤即可完成 GitHub API:

  1. 转到此 URL:https://api.github.com/repos/<user>/<repo>/events

这将 return/show 一个 JSON 对象,您可以在其中使用 CTRL+F 搜索丢失的提交并放置提交消息或作者。

  1. 复制提交的完整 SHA 并将其粘贴到以下命令中:
curl -u <user>:<password> -i -H "Accept: application/json" -H "Content-Type: application/json" -X POST -d '{"ref":"refs/heads/recover-commits", "sha":"<full_commit_sha>"}' https://api.github.com/repos/<user>/<repo>/git/refs

字段:

  • <user>:<password>:您的 GitHub 帐户的用户名和密码。

  • refs/heads/<branch-name>:新分支的ref,必须有两个斜杠,以"refs"开头。最后一个斜杠后面的是分支名称

  • sha:提交的sha,例如:"efdec9f65bf420b1af91ad1aded915a42c5fa34d"

  • <repo>: 存储库名称。

它将使用 GitHub API 发送请求以创建一个名为 'recover-commits' 的新分支,该分支指向该提交。

  1. 如果成功它应该return像这样:HTTP/1.1 201 Created Server: GitHub.com ...

  2. 从那里您可以挑选提交或将提交合并回您的主分支。

Source.