跟踪所有远程git分支作为本地分支
将单个远程分支作为本地分支进行跟踪非常简单。
$ 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
我使用了Google和RTM,但到目前为止已经出现了。
使用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
学分: Val Blant,elias和Hugo
在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似乎更喜欢本地分支。
Otto给出的答案很好,但是所有创建的分支都有“origin /”作为名字的开头。 如果你只是希望最后一部分(在最后一个/之后)成为你的结果分支名字,使用这个:
for remote in `git branch -r | grep -v /HEAD`; do git checkout --track $remote ; done
它也有没有给你任何关于含糊不清的refs的警告。
这里是我使用的单线程(在bash shell中,使用msysgit1.7.4进行测试):
复制粘贴:
remote=origin ; for brname in `git branch -r | grep $remote | grep -v master | grep -v HEAD | awk '{gsub(/^[^/]+//,"",$1); print $1}'`; do git branch --set-upstream-to $remote/$brname $brname; done
为了更多的可读性:
remote=origin ; // put here the name of the remote you want
for brname in `
git branch -r | grep $remote | grep -v master | grep -v HEAD
| awk '{gsub(/^[^/]+//,"",$1); print $1}'
`; do
git branch --set-upstream-to $remote/$brname $brname;
done
remote
变量中指定的remote
分支的上游分支(它可以是' origin
'或任何您为当前Git仓库的其中一个远程仓库设置的名称)。 awk
表达式提取分支的名称: origin/a/Branch/Name => a/Branch/Name
。 它会将上游分支设置为--set-upstream-to
(或-u
),而不是--track
:
好处是,如果分支已经存在,它不会失败,并且不会更改该分支原点,它只会配置branch.xxx.(remote|merge)
设置。
branch.aBranchName.remote=origin
branch.aBranchName.merge=refs/heads/a/Branch/Name
该命令将为所有远程上游分支创建本地分支,并将其远程和合并设置设置为该远程分支。
链接地址: http://www.djcxy.com/p/26145.html