如何从本地存储库中恢复意外删除的远程git存储库

时间:2009-12-21 03:20:51

标签: git

我做过类似的事情:

(1)将远程git存储库克隆到本地主机

本地#git clone http://www.foo.com foo

(2)在ssh主机(bar)上添加另一个项目作为第二个远程存储库

本地#git remote add bar ssh://bar/home/project

本地#git fetch bar

(3)在ssh主机(bar)上做了一些愚蠢的事情:

吧#rm -rf /home/project

请问您能告诉我如何从本地副本恢复ssh主机(bar)上的项目,因此ssh主机上的其他开发人员可以继续他们的工作,我可以运行'git fetch bar'来获取他们的提交就像我没有对他们的ssh主机做任何错误,即撤消我所做的所有主持吧。非常感谢。

更新:

吧#mkdir -p /home/project && cd /home/project && git init --bare

本地#git branch remote show bar

本地#git push bar bar/master:refs/heads/master

本地#git push bar bar/branch1:refs/heads/branch1

本地#git push bar bar/branch2:refs/heads/branch2

3 个答案:

答案 0 :(得分:8)

您可以将远程主机设置为新的git存储库,然后推送到它。

这篇博客讨论了如何做到这一点:

Toolman Tim - Setting up a new remote git repository

假设您仍然将栏设置为远程存储库,基本上是:

ssh bar "mkdir -p /home/project && cd /home/project && git --init bare"
git push bar refspec

refspec 通常只是本地存储库中分支的简单名称,因此:

git push bar master

请参阅git push manpage以获取有关refspec的资格的详细处理。 EXAMPLES部分特别有助于理解更高级的respecs

答案 1 :(得分:3)

而不是其中之一:

$ git push bar bar/branchX:refs/heads/branchX

为本地的每个ref'd分支。试试这个

$ git push bar refs/remotes/bar/*:refs/heads/*

上面的命令应该将您在本地缓存的所有远程引用推送回远程并将它们放在正确的位置。

请注意,您还需要推送您可能拥有的任何标签:

$ git push --tags bar

此外,在实际推动之前,了解将会发生什么是有帮助的:

$ git push --dry-run ...(rest of push cmd)  

注意:我使用'bar',其中大多数人都有'原产地' - 用遥控器的名称替换。

答案 2 :(得分:1)

按照Mark Carey的回答,我特意将已删除的存储库恢复如下:

吧#mkdir -p /home/project && cd /home/project && git init --bare

本地#git branch remote show bar

本地#git push bar bar/master:refs/heads/master

本地#git push bar bar/branch1:refs/heads/branch1

本地#git push bar bar/branch2:refs/heads/branch2

<强>更新

How to back up private branches in git