【发布时间】:2020-08-30 05:10:26
【问题描述】:
By somehow 我不小心强行推送了一个分支,我没有拉取只存在于远程的提交。
通常,当这种情况发生时,它可以使用 git reflog 命令恢复,但这次丢失的提交只在远程仓库中。
如何恢复那些只存在于 GitHub 存储库中的提交?
【问题讨论】:
标签: git github github-api
By somehow 我不小心强行推送了一个分支,我没有拉取只存在于远程的提交。
通常,当这种情况发生时,它可以使用 git reflog 命令恢复,但这次丢失的提交只在远程仓库中。
如何恢复那些只存在于 GitHub 存储库中的提交?
【问题讨论】:
标签: git github github-api
使用 GitHub API 只需几个步骤即可完成:
https://api.github.com/repos/<user>/<repo>/events
这将返回/显示一个 JSON 对象,您可以在其中使用 CTRL+F 搜索丢失的提交并放置提交消息或作者。
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”的新分支,该分支指向该提交。
如果成功,它应该返回如下内容:HTTP/1.1 201 Created Server: GitHub.com ...
您可以从那里挑选或合并提交回您的主分支。
【讨论】: