【发布时间】:2013-07-16 20:30:19
【问题描述】:
我使用克隆了一个仓库
git clone -b <branch name> --single-branch <github url> <target directory>
这仅克隆了这个分支,但现在我想切换到 master 和其他分支。除了清除它并重新开始克隆其余的 repo 之外,还有什么方法可以撤消 --single-branch 首选项?
【问题讨论】:
我使用克隆了一个仓库
git clone -b <branch name> --single-branch <github url> <target directory>
这仅克隆了这个分支,但现在我想切换到 master 和其他分支。除了清除它并重新开始克隆其余的 repo 之外,还有什么方法可以撤消 --single-branch 首选项?
【问题讨论】:
你可以像这样告诉 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 命令行工具非常强大(实际上,大多数命令都是根据其他命令实现的),因此一旦您了解了存储库的布局方式(基本上是.git 文件夹有效)。
git show-ref tags 仍然失败。
git clone --depth=1 --branch branchname git@github.com:foobar/repo.git destinationpath
为我工作:
git remote remove origin
git remote add origin https://*<yourPath>*.git
git fetch
【讨论】:
要将另一个远程分支添加到我使用 --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 时,它首先尝试将远程分支的所有提交再次合并到我的本地。
【讨论】:
我最初应用了 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
这会将所有内容重置为原始状态。
【讨论】:
只需更改您本地 repo 的 .git/config 文件,[remote origin] section 的 fetch 行。
在这样的事情之前
[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/*
【讨论】:
如果要添加单个分支,可以执行以下操作:
git remote set-branches --add origin [remote-branch]
git fetch origin [remote-branch]:[local-branch]
适用于 git 版本 1.9.1
【讨论】:
fetch = 行,当您想要在远程的两个分支之间切换但又不想获取一大堆其他分支时非常方便。谢谢!
只需将原始存储库添加为新的遥控器,然后就可以工作了吗?
git remote add path/to/myrepo myNewOrigin
git fetch myNewOrigin
如果您愿意,您甚至可以删除当前的“origin”遥控器并将“myNewOrigin”重命名为“origin”。
从那里你可以拉/合并/变基。
【讨论】: