跟踪单个远程分支作为本地分支非常简单。
$ git checkout --track -b ${branch_name} origin/${branch_name}
将所有本地分支推到远程,根据需要创建新的远程分支也很容易。
$ git push --all origin
我想做相反的事情。如果我在一个源上有X个远程分支:
$ git branch -r
branch1
branch2
branch3
.
.
.
我是否可以为所有这些远程分支创建本地跟踪分支,而不需要手动创建每个分支?可以这样说:
$ git checkout --track -b --all origin
我用谷歌搜索了一下,但到目前为止都是胡扯。
VonC的解决方案可以通过改变sed进一步简化(我缺乏代表点直接评论他的帖子):
for branch in $(git branch -r | sed 's,[^/]*/,,g'); do git switch $branch; done
通过替换所有非斜杠直到最后一个斜杠的内容,剩余的分支名称适合本地使用;重复切换到同一个分支并不是错误(这可能效率较低,但可能比在管道中使用grep:->更有效)。
switch命令足够智能,可以根据需要跟踪每个远程分支。
使用bash:
git 1.9.1之后
for i in `git branch -a | grep remote | grep -v HEAD | grep -v master`; do git branch --track ${i#remotes/origin/} $i; done
学分:瓦尔·布兰特、埃利亚斯和雨果
git 1.9.1之前
注意:以下代码如果在git (>v1.9.1)的更高版本中使用,会导致
(错误)所有创建的分支跟踪主
(烦恼)所有创建的本地分支名称都以origin/作为前缀
for remote in `git branch -r `; do git branch --track $remote; done
更新分支,假设你的本地跟踪分支没有变化:
for remote in `git branch -r `; do git checkout $remote ; git pull; done
忽略模棱两可的refname警告,git似乎更喜欢本地分支。