从本地恢复远程存储库上的所有git分支

从本地恢复远程存储库上的所有git分支,git,github,Git,Github,我有一个本地git存储库,从项目一开始就包含代码。但是远程存储库被完全删除(所有分支和提交历史都消失了) 是否有方法还原远程存储库上的所有分支(和提交历史记录)?还原丢失的远程存储库的方法取决于您是将其推送到新的空存储库,还是从自己的副本克隆 推送到新的空存储库 首先,在服务器上创建存储库(gitinit--bare和任何其他需要的设置)。确保您具有对该服务器的推送访问权限。您可以通过添加其URL,例如: git remote add new-server ssh://user@host/pat

我有一个本地git存储库,从项目一开始就包含代码。但是远程存储库被完全删除(所有分支和提交历史都消失了)


是否有方法还原远程存储库上的所有分支(和提交历史记录)?

还原丢失的远程存储库的方法取决于您是将其推送到新的空存储库,还是从自己的副本克隆

推送到新的空存储库 首先,在服务器上创建存储库(
gitinit--bare
和任何其他需要的设置)。确保您具有对该服务器的推送访问权限。您可以通过添加其URL,例如:

git remote add new-server ssh://user@host/path/to/repo.git
假设您将使用ssh来推送。如果通过https推送,请进行明显的调整

此时,您可以运行:

git push --tags new-server 'refs/remotes/origin/**:refs/heads/*'
这将推送原始远程
源站的所有远程跟踪名称,并在
新服务器上创建它们作为分支名称。如果您的遥控器未命名为origin,请进行明显的替换。
--tags
也会推送所有标记

克隆到新存储库的步骤 为了准备本地存储库,使其适合用作克隆,我们需要创建一个与每个远程跟踪名称对应的本地分支名称。这里我将假设每个远程跟踪名称都命名为
origin/which
;如果不是,则用适当的字符串替换
原点

为此:

git for-each-ref --format='%(refname)' refs/remotes/origin |
    while read rref; do
        lref=${rref#refs/remotes/origin/} # strip the boilerplate
        [ "$lref" = HEAD ] && continue # skip origin/HEAD
        git branch $lref $rref ||
            echo "WARNING: did not create $lref, make sure that's OK"
    done
这可能会打印至少一条关于无法创建
master
的警告。对于每个警告,请确保已与远程跟踪名称对应的每个本地分支最新或位于远程跟踪名称之前

现在,请确保可以通过您想要使用的URL访问客户端,然后在服务器上运行:

cd server/path/to
git clone --mirror --bare ssh://user@host/client/path/to/repo.git
这将在
server/path/to
中创建名为
repo.git
的裸克隆。您可能希望通过执行以下操作删除新克隆的
源站

cd repo.git
git remote remove origin
因为您可能永远不想重新镜像刚刚克隆的存储库