我克隆了一个包含许多分支的Git存储库。然而,git分支仅显示一个:

$ git branch
* master

我如何在本地拉所有分支,所以当我执行git分支时,它会显示以下内容?

$ git branch
* master
* staging
* etc...

当前回答

您可以通过以下方式获取所有分支:

git fetch --all

or:

git fetch origin --depth=10000 $(git ls-remote -h -t origin)

如果您对存储库进行了浅处理,--depth=10000参数可能会有所帮助。


要拉动所有分支,请使用:

git pull --all

如果上面的命令不起作用,那么在上面的命令前面加上:

git config remote.origin.fetch '+refs/heads/*:refs/remotes/origin/*'

因为remote.origin.fetch在提取时只能支持特定的分支,特别是当您使用--single分支克隆回购时。通过:git-config remote.origin.fetch检查此项。

之后,您应该可以签出任何分支。

另请参见:

如何获取所有远程分支?如何克隆Git中的所有远程分支?


要将所有分支推送到远程,请使用:

git push --all

最终--镜像到镜像所有引用。


如果您的目标是复制存储库,请参阅:在GitHub复制存储库文章。

其他回答

您可以通过以下方式获取所有分支:

git fetch --all

or:

git fetch origin --depth=10000 $(git ls-remote -h -t origin)

如果您对存储库进行了浅处理,--depth=10000参数可能会有所帮助。


要拉动所有分支,请使用:

git pull --all

如果上面的命令不起作用,那么在上面的命令前面加上:

git config remote.origin.fetch '+refs/heads/*:refs/remotes/origin/*'

因为remote.origin.fetch在提取时只能支持特定的分支,特别是当您使用--single分支克隆回购时。通过:git-config remote.origin.fetch检查此项。

之后,您应该可以签出任何分支。

另请参见:

如何获取所有远程分支?如何克隆Git中的所有远程分支?


要将所有分支推送到远程,请使用:

git push --all

最终--镜像到镜像所有引用。


如果您的目标是复制存储库,请参阅:在GitHub复制存储库文章。

循环似乎对我不起作用,我想忽略起源/主。这是对我有用的。

git branch -r | grep -v HEAD | awk -F'/' '{print $2 " " $1"/"$2}' | xargs -L 1 git branch -f --track

之后:

git fetch --all
git pull --all

确保所有远程分支都可以在.git/config文件中获取。

在本例中,只有原始/生产分支是可获取的,即使您尝试执行git fetch,除了获取生产分支之外,一切都不会发生:

[origin]
fetch = +refs/heads/production:refs/remotes/origin/production

该行应替换为:

[origin]
fetch = +refs/heads/*:refs/remotes/origin/*

然后运行git fetch等。。。

为避免出现错误消息“fatal:名为“origin/master”的分支已存在。”,你可以试试我的解决方案:

git branch -r | grep -v '\->'  | grep -v `git branch | awk '/\*/ { print $2; }'`| while read remote; do git branch --track "${remote#origin/}" "$remote"; done

您需要创建跟踪远程分支的本地分支。

假设您只有一个名为origin的远程,此代码片段将为所有远程跟踪分支创建本地分支:

for b in `git branch -r | grep -v -- '->'`; do git branch --track ${b##origin/} $b; done

之后,gitfetch-all将更新远程分支的所有本地副本。

此外,gitpull-all将更新您的本地跟踪分支,但根据您的本地提交以及“合并”配置选项的设置方式,它可能会创建一个合并提交、快进或失败。