我们服务器上的vm上有一个Gitlab CE
这个Gitlab服务器上有3个人在一个存储库上工作
这个Gitlab CE vm已被意外删除!
这三个人仍然有他们的本地存储库,有很多分支
我们的分支策略是这样的:
我们有一个Master分支和每个用户的一些功能分支
用户曾经:
现在,我有一些问题:
答案 0 :(得分:4)
在GitLab / BitBucket / GitHub中创建一个空的仓库。
使用新仓库的网址在当前仓库中添加新远程(例如another
)。然后将master
分支提交/更改推送到another
repo的主分支。
$ 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
),则只需checkout
到feature
分支,然后将更改推送到another
repo's {{ 1}}分支。
feature
将所有$ git checkout feature
$ git push another feature # push changes to 'another' repo's 'feature' branch
和branches
推送到tags
回购。
another
N.B。此处,$ git push --all --tags another
代表您新的回购网址。
答案 1 :(得分:3)
由于您的遥控器已被删除,您还没有任何来源,所以您必须在本地检查“远程”分支并为其分配原始名称,而不是将所有分支推送到遥控器。
如果您不希望本地分支机构只需按下您需要的分支机构。
这是一个用于结帐所有分支而不是将它们推送到新远程
的脚本#!/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
强>
删除master(当前分支)和HEAD,它是最新提交的别名
答案 2 :(得分:2)
您可以复制(或克隆 - 禁用)其中一个本地存储库,并重新设置/删除未合并到远程仓库的提交。之后,您可以将此作为远程使用。
答案 3 :(得分:0)
我不小心删除了“起源”上的分支。但是我仍然有本地副本。这是我在“ origin”上重新创建分支的方法:
当我切换到本地副本时,看到了以下消息:
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
这使分支恢复到正常的未按下状态。为了让它恢复原状,我就跑了
git push --set-upstream origin my-special-branch