如何在不使用 git reflog 的情况下恢复丢失的提交?
How to recover lost commits without using git reflog?
By somehow 我不小心强行推送了一个分支,我没有拉取只存在于远程的提交。
通常,发生这种情况时可以使用 git reflog 命令恢复,但这次丢失的提交仅在远程仓库中。
如何恢复那些只存在于 GitHub 存储库中的提交?
只需几个步骤即可完成 GitHub API:
- 转到此 URL:
https://api.github.com/repos/<user>/<repo>/events
这将 return/show 一个 JSON 对象,您可以在其中使用 CTRL+F 搜索丢失的提交并放置提交消息或作者。
- 复制提交的完整 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' 的新分支,该分支指向该提交。
如果成功它应该return像这样:HTTP/1.1 201 Created Server: GitHub.com ...
从那里您可以挑选提交或将提交合并回您的主分支。
By somehow 我不小心强行推送了一个分支,我没有拉取只存在于远程的提交。
通常,发生这种情况时可以使用 git reflog 命令恢复,但这次丢失的提交仅在远程仓库中。
如何恢复那些只存在于 GitHub 存储库中的提交?
只需几个步骤即可完成 GitHub API:
- 转到此 URL:
https://api.github.com/repos/<user>/<repo>/events
这将 return/show 一个 JSON 对象,您可以在其中使用 CTRL+F 搜索丢失的提交并放置提交消息或作者。
- 复制提交的完整 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' 的新分支,该分支指向该提交。
如果成功它应该return像这样:
HTTP/1.1 201 Created Server: GitHub.com ...
从那里您可以挑选提交或将提交合并回您的主分支。