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

时间:2013-07-18 03:45:12

标签: git github

我使用

克隆了一个回购

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

这只克隆了这个分支,但现在我想切换到master和其他分支。有没有什么方法除了清除它并重新开始克隆我可以撤消--single-branch首选项的其余repo?

7 个答案:

答案 0 :(得分:95)

你可以告诉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"]下的“fetch”。

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

答案 1 :(得分:37)

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

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

使用git版本1.9.1

答案 2 :(得分:7)

要向使用--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时,它首先尝试将远程分支的所有提交再次合并到我的本地分支。

答案 3 :(得分:2)

只需将原始仓库添加为新遥控器,然后在那里工作吗?

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

如果您愿意,您甚至可以删除当前的'origin'遥控器并将'myNewOrigin'重命名为'origin'。

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

答案 4 :(得分: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/*

答案 5 :(得分: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

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

答案 6 :(得分:0)

为我工作:

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