[英]Recover unreferenced commits from remote git repository
这是情况:一些提交已在远程存储库中完成。
不幸的是,有人确实push -f
这样没有远程分支引用这些提交了。
更糟糕的是,我在本地克隆中没有这些提交。
我的目标基本上是恢复那些提交。 这些是我尝试的一些事情:
git checkout -b recovery <commit_id>
:致命:引用不是树 git push origin <commit_id>:recovery
错误:refs / heads / recovery没有指向有效对象! 错误:无法推送到不合格的目标:恢复目标refspec既不匹配遥控器上的现有引用也不以refs /开头,我们无法根据源引用猜测前缀。
如果您有提交的哈希值,那么您可以从bitbucket下载源代码树,其链接如下:
https://bitbucket.org/ownerName/repositoryName/get/A0B1C2D.zip
.zip和.tar.gz都有效。
这并不能完全恢复提交,但至少你不会丢失源代码更改。 我用它来简单地创建具有相同更改的另一个提交。
问题是您的本地存储库没有该提交ID。
git checkout -b recovery <commit_id>
git push origin <commit_id>:recovery
由于这个原因,这两个命令都失败了,如果我使用本地不存在的提交ID,我会使用GitHub repo获得完全相同的消息。
我认为答案只是简单地在本地获取丢失的提交,其中一种方式是:
git fetch origin #1
git fetch origin SHA1 #2
git fetch origin SHA1:refs/remotes/origin/recovery #3
不幸的是,这些都不奏效。 根据这个答案 ,似乎#2曾经用于Git v1.4。 截至目前,它已不再适用。
在GitHub上有一个帮助页面 ,但没有你可以使用的答案:它基本上说如果你在本地提交你可以从它创建一个分支并推送它。 是的,但是如果你没有本地提交那么呢? 它没有回答这个问题。
我可以想到两个选择:
git log SHA1
检查很容易。 如果有人拥有它,他们可以使用git branch recovery SHA1
从它创建一个分支,然后推送它。 recovery
分支。 有一点小技巧 - 你说你已经在web界面中打开了提交。 我的Stash版本能够在此提交中创建标记。 寻找“没有标签[+]”
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.