情况如下:一些提交已在远程存储库中完成。
不幸的是,有人做了push -f
这样就没有远程分支引用这些提交了。
更糟糕的是,我的本地克隆中没有这些提交。
我的目标基本上是恢复那些提交。这些是我尝试过的一些事情:
-
git checkout -b recovery <commit_id>
: fatal: reference 不是一棵树 -
git push origin <commit_id>:recovery
error: refs/heads/recovery does not point to a valid object! error: unable to push to unqualified destination: recovery The destination refspec neither matches an existing ref on the remote nor begins with refs/, and we are unable to guess a prefix based on the source ref.
最佳答案
问题是您的本地存储库没有该提交 ID。
git checkout -b recovery <commit_id>
git push origin <commit_id>:recovery
这两个命令都因此失败,如果我使用本地不存在的提交 ID,我会通过 GitHub 存储库收到完全相同的消息。
我认为答案只是通过以下方式之一在本地获取丢失的提交:
git fetch origin #1
git fetch origin SHA1 #2
git fetch origin SHA1:refs/remotes/origin/recovery #3
不幸的是,这些都不起作用。根据 this answer,#2 似乎从 Git v1.4 开始工作.截至目前,它不再起作用。
有一个help page for this on GitHub ,但没有你可以使用的答案:它基本上说如果你在本地提交,你可以从它创建一个分支并推送它。是的,但是如果您没有本地提交,那怎么办?它没有回答这个问题。
我可以想到两种选择:
- 找到有此 promise 的队友。使用
git log SHA1
很容易检查。如果有人拥有它,他们可以使用git branch recovery SHA1
从它创建一个分支,然后推送它。 - 联系 bitbucket 支持。由于他们在某个地方进行了提交,他们应该能够为您创建一个
recovery
分支。
关于git - 从远程 git 存储库中恢复未引用的提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21962653/