我使用
克隆了一个回购 git clone -b <branch name> --single-branch <github url> <target directory>
这只克隆了这个分支,但现在我想切换到master和其他分支。有没有什么方法除了清除它并重新开始克隆我可以撤消--single-branch首选项的其余repo?
答案 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