如何从已删除的 Git 远程存储库中恢复

how to recover from a Git remote repository deleted

我们在服务器的虚拟机上有一个 Gitlab CE。
有 3 个人在这个 Gitlab 服务器上处理一个存储库。
这个Gitlab CE vm被意外删除了! 这 3 个人的本地仓库还有很多分支。
我们的分支策略是这样的:
我们有一个主分支和每个用户的一些功能分支。
用户习惯于:

现在,我有一些问题:

  1. 有什么方法可以从本地重新创建远程仓库吗?
  2. 如果没有,我应该如何创建另一个远程仓库并将所有提交合并到它?
  • 在 GitLab/BitBucket/GitHub 中创建一个空存储库。

  • 在您当前的仓库中使用新仓库的 URL 添加一个新的遥控器(例如,another)。然后将你的 master 分支 commits/changes 推送到 another 仓库的主分支。

    $ git remote add another <new-repo-url>
    $ git remote -v                 # see if the remote is added correctly 
    $ git checkout master
    
    $ git push another master       # push the changes to another/master
    
  • 如果您需要另一个分支的功能(例如,feature),那么只需 checkoutfeature 分支并将更改推送到 another 回购的 feature 分支。

    $ git checkout feature
    $ git push another feature      # push changes to 'another' repo's 'feature' branch
    
  • 将所有 branchestags 推送到 another 仓库。

    $ git push --all --tags another
    

N.B. 这里,another 代表你的新仓库的 URL.

您可以复制(或克隆 --bare)其中一个本地存储库和 rebase/delete 未合并到远程存储库的提交。之后你就可以用这个作为遥控器了。

由于您的远程已被删除,您还没有任何来源,因此您必须在本地检查“远程”分支并为其分配原始名称,然后将所有分支推送到远程。

如果您不想要本地分支机构,只需推送您需要的分支机构即可。

这是我用来检查所有分支然后将它们推送到新远程的凭据

#!/bin/bash

# add the new origin 
git remote add origin2 <url>

# loop over all the original branches and set the new remote as the new track origin
for branch in `git branch -a | grep remotes | grep -v HEAD | grep -v master `; do
    git branch --track ${branch#remotes/origin2/} $branch
done

# now push all branches and tags
git push origin2 --all    
git push origin2 --tags

脚本的作用是什么?

git branch -a
获取所有本地分支机构的列表

| grep remotes 分支名称是:'remotes/origin/' 所以这将从分支名称中删除遥控器

| grep -v HEAD | grep -v master
删除主(当前分支)和 这是最新提交的别名

我在 "origin" 上不小心删除了我的 b运行ch。但我仍然有一份本地副本。这是我在 "origin":

上重新创建 b运行ch 的方法

当我切换到本地副本时,我看到了这条消息:

Switched to branch 'my-special-branch'
Your branch is based on 'origin/my-special-branch', but the upstream is gone.
  (use "git branch --unset-upstream" to fixup)

我用过:

git branch --unset-upstream

这使 b运行ch 恢复到正常的未推送状态。为了让它回到原点,我只是 运行

git push --set-upstream origin my-special-branch