一尘不染

如何获取所有 Git 分支

javascript

我克隆了一个 Git 存储库,其中包含大约五个分支。但是,当我这样做时,git branch我只看到其中一个:

$ git branch
* master

我知道我可以git branch -a查看所有分支,但是我将如何在本地拉所有分支,所以当我这样做时git branch,它会显示以下内容?

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

阅读 158

收藏
2022-02-13

共1个答案

一尘不染

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

这基本上是一个权力的举动

fetch更新远程分支的本地副本,因此这对您的本地分支始终是安全的,但是

  1. fetch不会更新本地分支(跟踪远程分支);如果你想更新你的本地分支,你仍然需要拉每个分支。
  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

PS AFAIKgit fetch --all并且git remote update是等效的。

我不得不使用:

for remote in `git branch -r`; do git branch --track ${remote#origin/} $remote; done

因为您的代码创建了名为的本地分支origin/branchname,而每当我提到它时,我得到的“refname ‘origin/branchname’ 是模棱两可的。

2022-02-13