131

我克隆了一个回购使用

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

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

4

7 回答 7

197

你可以像这样告诉 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查看是否可以看到类似的内容。

于 2013-07-18T04:48:04.797 回答
77

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

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

适用于 git 版本 1.9.1

于 2015-01-09T11:57:43.287 回答
15

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

于 2020-03-25T09:43:10.057 回答
2

对我来说工作:

git remote remove origin
git remote add origin https://*<yourPath>*.git
git fetch
于 2020-07-29T22:58:33.260 回答
1

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

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

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

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

于 2013-07-18T04:02:09.053 回答
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/*
于 2019-12-10T15:20:35.730 回答
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

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

于 2020-02-18T07:25:36.847 回答