git - 如何获取所有 Git 分支?

标签 git branch git-branch

我克隆了一个包含许多分支的 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 更新远程分支的本地副本,因此这对您的本地分支始终是安全的但是:

  1. fetch 不会更新 本地分支(跟踪 远程分支);如果您想更新本地分支机构,您仍然需要 pull 每个分支机构。

  2. 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 --allgit 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/

相关文章:

git - 将存储库从一个用户帐户转移到另一个用户帐户

version-control - Hg 几乎犯错了分支

git - 在 git 上 merge 一个主题分支,删除所有主题分支的提交历史?

version-control - P4v 集成错误

git branch 回滚到之前的提交

git - 列出通过 git-review 下载的本地分支的关联 Gerrit 补丁集编号

git - 执行 ls-remote 命令期间捕获的 EGit SSH 异常

git - bash 始终将 git 分支显示为脏

git - 复杂的 Git 分支名称破坏了所有 Git 命令

git - 如何在没有 --set-upstream 的情况下推送远程服务器上不存在的新分支?