我的组织在GitHub上有一个远程存储库,它是另一个存储库的分支。我在我的本地机器上制作了一个克隆,并创建了一个本地分支'test'。以下是随后的命令列表:
git fetch origin '+refs/heads/*:refs/remotes/origin/*'
git push --mirror
git push --all
接下来的事情就是噩梦。在我的本地计算机上未检出的任何远程分支已在存储库中删除。我已经完成了git branch -a
但是只显示了本地副本中存在的远程分支。我已完成git reflog show
但只显示当前分支HEAD
上的日志。做git fsck
显示6'悬空提交'和2'悬空blob'。在做git push --mirror
之前,分支有16个分支,其中5个由我们的组织创建,其余分支来自原始分支。我知道之前已经提出了类似的问题(如果不是相同的话),但在这一点上,这些问题都没有任何意义。我对能阻止我被解雇的任何人表示最崇高的敬意和最高的谢意。
答案 0 :(得分:1)
有几件事要尝试。前两种方法将帮助您恢复以前是分支提示的SHA1。但有一点难以恢复的是缺失分支的名称,除非之前已知过。
如果您最近访问过某些分支机构,您的reflog将提供以下提示:
git reflog
您可以使用以下命令创建所有悬空和丢失和找到的提交的列表:
git fsck --full --no-reflogs --unreachable --lost-found | \
grep commit | \
cut -d" " -f3 | \
xargs -n 1 git log -n 1 --pretty=oneline > .git/lost-found.txt
然后查看提交是否与丢失的分支匹配。
如果您知道要恢复的分支的名称,那么您也可以尝试:
git-resurrect.sh
来尝试通过扫描您的reflog和其他来源来“复活”过去的分支。这非常慢,大型存储库可能需要很长时间。答案 1 :(得分:1)
如果您对推送到的遥控器有文件系统访问权限,则可以从MYREPO.git/info/refs
恢复已删除的分支。
内容看起来像这样。
2ef208a632946dd4b5fd6f124a7fd6fc1c2ab87e refs/heads/foo-feature
7325d39f52d6663e33f360b3bd666300ce2c52b0 refs/heads/bar-feature
对于您要恢复的每个分支,请在本地回购中创建一个文件。
$ echo 2ef208a632946dd4b5fd6f124a7fd6fc1c2ab87e > .git/refs/heads/foo-feature
然后,将新恢复的分支推送回服务器。
$ git push --all