我怎么“撤销”一个单分支克隆?

我复制了一个回购协议

git clone -b <branch name> --single-branch <github url> <target directory>

这只克隆了这个分支,但是现在我想切换到主分支和其他分支。除了清除它并重新克隆回购的其余部分之外还有什么办法可以撤销单分支优先权吗?

35436 次浏览

只要把原来的回购作为一个新的遥控器,并在那里工作了吗?

git remote add path/to/myrepo myNewOrigin
git fetch myNewOrigin

你甚至可以删除你当前的“起源”远程和重命名“我的新起源”到“起源”,如果你愿意。

从那里您可以提取/合并/重定基。

您可以告诉 Git 像下面这样拉动所有分支:

git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"
git fetch origin

如果你看 .git/config,它会像这样:

[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
ignorecase = true
precomposeunicode = false
[remote "origin"]
url = https://github.com/owner/repo.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
rebase = true

我将其与完整的克隆进行了比较,发现唯一的区别是 [remote "origin"]下的“提取”。

注意: 我正在运行 Git 版本1.8.2。如果您运行的是 Git 的旧版本,那么配置选项可能已经更改。如果我的命令不起作用,那么我建议您查看 .git/config,看看是否可以看到类似的内容。

如果要添加单个分支,可以执行以下操作:

git remote set-branches --add origin [remote-branch]
git fetch origin [remote-branch]:[local-branch]

可用于 git 版本1.9.1

只需更改本地回购的 .git/config文件,即 [remote origin] sectionfetch行。

在发生这种事之前

[remote "origin"]
url = https://github.com/owner/repo.git
fetch = +refs/heads/master:refs/remotes/origin/master

以后就会这样了

[remote "origin"]
url = https://github.com/owner/repo.git
fetch = +refs/heads/*:refs/remotes/origin/*

我最初应用了 Dominik Pawlak 的答案,结果奏效了。但是在我向新分支提交了更多代码之后,我无法再做任何更改。

还有一种完全重置 single-branch的方法,这里没有提到:

git remote remove origin
git remote add origin git@gitlab.com:{yourProject}/{yourRepo}.git
git branch --set-upstream-to=origin/{yourBranch}  {yourBranch}
git pull

这会让一切恢复原样。

要将另一个使用 --single-branch克隆的远程分支 添加到我的本地存储库,以下方法对我很有用:

git remote set-branches --add origin [remote-branch]
git fetch
git checkout [remote-branch]

也可以对 [remote-branch]使用通配符,例如。

git remote set-branches --add origin release-1.*
git fetch
git checkout release-1.5

这使用 git 版本2.21.1 可以工作。建议使用 git fetch origin [remote-branch]:[local-branch]的其他答案不起作用,因为它在未跟踪状态下创建了本地分支。在运行 git pull时,它首先尝试再次将远程分支的所有提交合并到本地分支。

对我来说:

git remote remove origin
git remote add origin https://*<yourPath>*.git
git fetch