如何“撤消”-单分支克隆?


102

我使用

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

这仅克隆了此分支,但现在我想切换到master和其他分支。除了清除并重新克隆回购协议的其余部分之外,还有什么方法可以撤消--single-branch首选项吗?

Answers:


147

您可以告诉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/master:refs/remotes/origin/master
[branch "master"]
    remote = origin
    merge = refs/heads/master
    rebase = true

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

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


2
只是想给您一个特别的感谢,因为我做了很多阅读和谷歌搜索工作,并且无法遇到这样的事情。
danieltalsky

2
乐意效劳。该git命令行工具是令人难以置信的强大(其实大部分的命令其他命令的条款来实现),这样你就可以,一旦你了解了仓库的布局方式(基本上怎么做了一大堆的东西,它.git的文件夹作品)。
sarahhodne

这对我不起作用-运行这些命令后git show-ref tags仍然失败。
felixfbecker

1
请注意,如果也使用以下语法对分支进行了浅克隆,则此解决方案也将起作用,该语法也会遇到OP描述的相同缺点:git clone --depth=1 --branch branchname git@github.com:foobar/repo.git destinationpath
danemacmillan

1
哇,这远非直觉!奇怪的是,Git并没有命令来完成此任务。是的,我让它正常工作...现在我也知道.git目录中的配置文件!
kashiraja

60

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

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

适用于git版本1.9.1


1
我爱上了你
user1760150

4
这会fetch =在.git / config中添加多行,当您要在远程的两个分支之间切换但不获取其他所有分支时,非常方便。谢谢!
特里·布朗

4

要将另一个远程分支添加到使用克隆的本地存储库中--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它首先尝试将远程分支的所有提交再次合并到本地。


2
第二次我回到这个答案。很有用。谢谢!
戈德布特

1
最有用的答案
Denis Itskovich

1
第三次大声笑。
Godbout

听起来我们的发布周期
差不多

1

只需将原始存储库添加为新的远程服务器,然后在那里工作?

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

您甚至可以删除当前的“原点”遥控器,并将“ myNewOrigin”重命名为“原点”。

从那里您可以拉/合并/变基。


0

只需更改.git/config您本地仓库的文件fetch[remote origin] section

在这样的事情之前

[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/*

0

我最初应用了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

这会将所有内容重置为原始内容。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.