我克隆了一个包含许多分支的Git存储库。然而,git分支仅显示一个:

$ git branch
* master

我如何在本地拉所有分支,所以当我执行git分支时,它会显示以下内容?

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

当前回答

Bash for循环不适合我,但这正是我想要的。我的所有分支在本地镜像为相同的名称。

git checkout --detach
git fetch origin '+refs/heads/*:refs/heads/*'

请参见下面Mike DuPont的评论。我想我是在Jenkins服务器上做这件事的,这让它处于分离头部模式。

其他回答

设置别名:(基于顶部答案)

git config --global alias.track-all-branches '!git fetch --all && for remote in `git branch -r`; do git branch --track ${remote#origin/} $remote; done && git fetch --all'

现在要跟踪所有分支:

git跟踪所有分支

玩git时要小心,循序渐进。

$ git remote update  //This will update your local
$ git branch -a      //This will list all the branches(After updating you can now 
see the new branch in the list)
$ git checkout your_branch_name

以下是我认为可靠的东西:

不更新现有分支的远程跟踪不尝试更新HEAD以跟踪原点/HEAD允许命名为非原点的远程正确引用外壳

for b in $(git branch -r --format='%(refname:short)'); do
  [[ "${b#*/}" = HEAD ]] && continue
  git show-ref -q --heads "${b#*/}" || git branch --track "${b#*/}" "$b";
done
git pull --all

不需要git fetch,因为将all传递给git pull会将此选项传递给内部fetch。

这个答案值得称赞。

我通常只使用以下命令:

git fetch origin
git checkout --track origin/remote-branch

略短的版本:

git fetch origin
git checkout -t origin/remote-branch
$ git remote update
$ git pull --all

这假设所有分支都被跟踪。

如果他们不是,你可以在Bash中发射这个:

for remote in `git branch -r `; do git branch --track $remote; done

然后运行命令。

注意:请阅读下面的警告注释。