如何获取所有的git分支?
我克隆了一个包含大约5个分支的git仓库。 但是,当我做git branch
我只能看到其中一个:
$ git branch
* master
我知道我可以做git branch -a
来查看所有的分支,但是我怎样才能在本地拉出所有分支,所以当我做git branch
,它会显示:
$ git branch
* master
* staging
* etc...
我前一段时间写了我的答案,最后downvote激励我用我后来的经验更新它:-)
编辑:此答案的以前版本创建了具有'origin'前缀的分支,全部指向主分支,而不是实际分支,并且存在变量扩展问题。 这已根据评论得到解决。
你可以像这样从所有遥控器中获取一个分支:
git fetch --all
fetch
更新远程分支的本地副本,以便您的本地分支始终安全但是 :
fetch
不会更新本地分支( 跟踪远程分支); 如果你想更新你的本地分行,你仍然需要拉动每一个分行。
fetch
不会创建本地分支( 跟踪远程分支),您必须手动执行此操作。 如果你想列出所有的远程分支: git branch -a
要更新追踪远程分行的本地分行:
git pull --all
但是,这仍然不够。 它只适用于追踪远程分行的当地分行。 跟踪所有的远程分支执行这个oneliner 之前 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
是等效的。
Kamil Szot的评论,其中74(至少)人认为有用。
我不得不使用:
for remote in `git branch -r`; do git branch --track ${remote#origin/} $remote; done
因为你的代码创建了名为origin/branchname
本地分支,并且当我引用它时,我得到了“refname'origin / branchname''模糊不清。
要列出远程分行:
git branch -r
您可以通过以下方式将其作为当地分行核对:
git checkout -b LocalName origin/remotebranchname
您需要创建跟踪远程分行的本地分行。
假设您只有一个远程调用origin
,此片段将为所有远程跟踪调用创建本地分支:
for b in `git branch -r | grep -v -- '->'`; do git branch --track ${b##origin/} $b; done
之后, git fetch --all
将更新远程分支的所有本地副本。
此外, git pull --all
会更新您的本地跟踪分支,但取决于您的本地提交以及如何设置“合并”配置选项,它可能会创建合并提交,快进或失败。