我克隆了一个Git存储库,它包含大约五个分支。 但是,当我做git branch
我只看到其中一个:
$ git branch
* master
我知道我可以做git branch -a
来查看所有分支,但是我如何在本地拉出所有分支,所以当我做git branch
,它会显示以下内容?
$ git branch
* master
* staging
* etc...
#1楼
$ git remote update
$ git pull --all
这假定跟踪所有分支。
如果他们不是你可以用Bash解雇这个:
for remote in `git branch -r `; do git branch --track $remote; done
然后运行该命令。
#2楼
您可以从所有遥控器中获取所有分支,如下所示:
git fetch --all
这基本上是一种权力移动 。
fetch
更新远程分支的本地副本,因此这对于您的本地分支来说总是安全的但是 :
fetch
不会更新本地分支( 跟踪远程分支); 如果你想更新你的本地分支,你仍然需要拉每个分支。fetch
不会创建本地分支( 跟踪远程分支),您必须手动执行此操作。 如果要列出所有远程分支:git branch -a
更新跟踪远程分支的本地分支:
git pull --all
但是,这仍然不够。 它仅适用于跟踪远程分支的本地分支。 要跟踪所有远程分支,请执行此oneliner BEFORE git pull --all
:
git branch -r | grep -v '\->' | while read remote; do git branch --track "${remote#origin/}" "$remote"; done
TL; DR版本
git branch -r | grep -v '\->' | while read remote; do git branch --track "${remote#origin/}" "$remote"; done
git fetch --all
git pull --all
(看起来拉取所有遥控器的所有分支,但我总是首先获取以确定。)
仅当服务器上存在未由本地分支跟踪的远程分支时,才运行第一个命令。
PS AFAIK git fetch --all
和git remote update
是等效的。
卡米尔索佐的评论 ,人们发现有用。
我不得不使用:
for remote in `git branch -r`; do git branch --track ${remote#origin/} $remote; done
因为你的代码创建了名为
origin/branchname
本地分支,而且每当我提到它时,我得到的“refname”origin / branchname'都是模棱两可的。
#3楼
列出远程分支: git branch -r
您可以将它们作为本地分支机构查看: git checkout -b LocalName origin/remotebranchname
#4楼
如果你这样做:
git fetch origin
然后他们将在当地。 如果你然后执行:
git branch -a
你会看到它们被列为遥控器/原点/分支名称。 因为他们在当地,你可以随心所欲地做任何事情。 例如:
git diff origin/branch-name
要么
git merge origin/branch-name
要么
git checkout -b some