我克隆了一个包含许多分支的 Git 存储库。但是,git branch
只显示一个:
$ git branch
* master
当我执行 git branch
时,如何在本地 pull 所有分支,它会显示以下内容?
$ git branch
* master
* staging
* etc...
最佳答案
TL;DR 回答
git branch -r | grep -v '\->' | sed "s,\x1B\[[0-9;]*[a-zA-Z],,g" | while read remote; do git branch --track "${remote#origin/}" "$remote"; done
git fetch --all
git pull --all
(似乎 pull 从所有远程获取所有分支,但我总是首先获取只是为了确定。)
仅当服务器上存在本地分支未跟踪的远程分支时才运行第一个命令。
完整答案
你可以像这样从所有远程获取所有分支:
git fetch --all
它基本上是一个 power move .
fetch
更新远程分支的本地副本,因此这对您的本地分支始终是安全的但是:
fetch
不会更新 本地分支(跟踪 远程分支);如果您想更新本地分支机构,您仍然需要 pull 每个分支机构。fetch
不会创建 本地分支(跟踪 远程分支),您必须手动执行此操作。如果要列出所有远程分支:git branch -a
要更新跟踪远程分支的本地分支:
git pull --all
然而,这仍然不够。它仅适用于跟踪远程分支的本地分支。要跟踪所有远程分支,请执行此 oneliner BEFORE git pull --all
:
git branch -r | grep -v '\->' | sed "s,\x1B\[[0-9;]*[a-zA-Z],,g" | while read remote; do git branch --track "${remote#origin/}" "$remote"; done
附言AFAIK git fetch --all
和 git remote update
是等价的。
Kamil Szot 的 comment ,人们发现这些有用。
I had to use:
for remote in `git branch -r`; do git branch --track ${remote#origin/} $remote; done
because your code created local branches named
origin/branchname
and I was getting "refname 'origin/branchname' is ambiguous whenever I referred to it.
关于git - 如何获取所有 Git 分支?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10312521/