我克隆了一个包含许多分支的Git存储库。然而,git分支仅显示一个:
$ git branch
* master
我如何在本地拉所有分支,所以当我执行git分支时,它会显示以下内容?
$ git branch
* master
* staging
* etc...
我克隆了一个包含许多分支的Git存储库。然而,git分支仅显示一个:
$ git branch
* master
我如何在本地拉所有分支,所以当我执行git分支时,它会显示以下内容?
$ git branch
* master
* staging
* etc...
当前回答
你看不到远程分支,因为你没有跟踪它们。
确保您正在跟踪所有远程分支(或要跟踪的任何分支)。更新本地分支以反映远程分支。
跟踪所有远程分支:
跟踪远程回购中存在的所有分支。
手动执行:
您可以将<branch>替换为gitbranch-r输出中显示的分支。
git branch -r
git branch --track <branch>
使用bash脚本执行:
for i in $(git branch -r | grep -vE "HEAD|master"); do git branch --track ${i#*/} $i; done
懒惰的方式(由于合并冲突,这可能会造成混乱,请小心):
git checkout master
git pull
更新本地计算机上远程分支的信息:
这将从您正在本地回购中跟踪的远程回购中获取分支的更新。这不会改变您的本地分支。您的本地git回购现在知道远程回购分支上发生的事情。一个例子是,一个新的提交被推送到远程主机,执行一个fetch将提醒您本地主机落后于一个提交。
git fetch --all
更新本地计算机上远程分支的信息并更新本地分支:
对从远程分支到本地分支的所有分支执行一次提取,然后进行一次合并。例如,一个新的提交已被推送到远程主机,执行拉取操作将更新远程分支中的更改的本地回购,然后将这些更改合并到本地分支中。由于合并冲突,这可能会造成相当混乱。
git pull --all
其他回答
$ git remote update
$ git pull --all
这假设所有分支都被跟踪。
如果他们不是,你可以在Bash中发射这个:
for remote in `git branch -r `; do git branch --track $remote; done
然后运行命令。
注意:请阅读下面的警告注释。
确保所有远程分支都可以在.git/config文件中获取。
在本例中,只有原始/生产分支是可获取的,即使您尝试执行git fetch,除了获取生产分支之外,一切都不会发生:
[origin]
fetch = +refs/heads/production:refs/remotes/origin/production
该行应替换为:
[origin]
fetch = +refs/heads/*:refs/remotes/origin/*
然后运行git fetch等。。。
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更新远程分支的本地副本,因此这对本地分支总是安全的,但是:
fetch不会更新本地分支(跟踪远程分支);如果要更新本地分支,仍然需要拉动每个分支。fetch不会创建本地分支(跟踪远程分支),您必须手动执行此操作。如果要列出所有远程分支:查看所有的分支
要更新跟踪远程分支的本地分支,请执行以下操作:
git pull --all
然而,这仍然不够。它只适用于跟踪远程分支的本地分支。要跟踪所有远程分支,请在git pull-all之前执行以下oneliner:
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
P.S.AFAIK git fetch--all和git远程更新是等效的。
Kamil Szot的评论,人们发现这很有用。
我必须使用:对于“gitbranch-r”中的remote;do git branch--跟踪${remote#origin/}$remote;完成因为您的代码创建了名为origin/branchname和每当我参考它。
使用git fetch和git checkout RemoteBranchName。
这对我来说很好。。。
只有这三个命令才能获得所有分支:
git clone --mirror repo.git .git (gets just .git - bare repository)
git config --bool core.bare false
git reset --hard