可以“git pull --all”更新我所有的本地分支机构吗?

可以“git pull --all”更新我所有的本地分支机构吗?

我经常至少有3个远程分支:master,staging和production。我有3个本地分支跟踪那些远程分支。


更新我所有的本地分支机构很繁琐:


git fetch --all

git rebase origin/master

git checkout staging

git rebase origin/staging

git checkout production

git rebase origin/production

我很乐意能够做一个“git pull -all”,但我无法让它发挥作用。它似乎执行“fetch --all”,然后更新(快进或合并)当前工作分支,而不是其他本地分支。


我仍然卡在手动切换到每个本地分支和更新。


至尊宝的传说
浏览 5172回答 3
3回答

慕的地10843

我知道这个问题已经快3年了,但我问自己同样的问题并没有找到任何现成的解决方案。所以,我自己创建了一个自定义git命令shell脚本。在这里,git-ffwd-update脚本执行以下操作...它发出一个git remote update来获取lates revs然后用于git remote show获取跟踪远程分支的本地分支列表(例如可以使用的分支git pull)然后它检查git rev-list --count <REMOTE_BRANCH>..<LOCAL_BRANCH>遥控器后面的本地分支提交的数量(反之亦然)如果本地分支提前1或更多提交,则不能快速转发,需要手动合并或重新绑定如果本地分支提前0提交,后面提交1个或多个提交,则可以快速转发&nbsp;git branch -f <LOCAL_BRANCH> -t <REMOTE_BRANCH>该脚本可以像:$&nbsp;git&nbsp;ffwd-updateFetching&nbsp;origin &nbsp;branch&nbsp;bigcouch&nbsp;was&nbsp;10&nbsp;commit(s)&nbsp;behind&nbsp;of&nbsp;origin/bigcouch.&nbsp;resetting&nbsp;local&nbsp;branch&nbsp;to&nbsp;remote &nbsp;branch&nbsp;develop&nbsp;was&nbsp;3&nbsp;commit(s)&nbsp;behind&nbsp;of&nbsp;origin/develop.&nbsp;resetting&nbsp;local&nbsp;branch&nbsp;to&nbsp;remote &nbsp;branch&nbsp;master&nbsp;is&nbsp;6&nbsp;commit(s)&nbsp;behind&nbsp;and&nbsp;1&nbsp;commit(s)&nbsp;ahead&nbsp;of&nbsp;origin/master.&nbsp;could&nbsp;not&nbsp;be&nbsp;fast-forwarded完整的脚本应该保存为git-ffwd-update并且需要在PATH。#!/bin/bashmain()&nbsp;{ &nbsp;&nbsp;REMOTES="$@"; &nbsp;&nbsp;if&nbsp;[&nbsp;-z&nbsp;"$REMOTES"&nbsp;];&nbsp;then &nbsp;&nbsp;&nbsp;&nbsp;REMOTES=$(git&nbsp;remote); &nbsp;&nbsp;fi &nbsp;&nbsp;REMOTES=$(echo&nbsp;"$REMOTES"&nbsp;|&nbsp;xargs&nbsp;-n1&nbsp;echo) &nbsp;&nbsp;CLB=$(git&nbsp;rev-parse&nbsp;--abbrev-ref&nbsp;HEAD); &nbsp;&nbsp;echo&nbsp;"$REMOTES"&nbsp;|&nbsp;while&nbsp;read&nbsp;REMOTE;&nbsp;do &nbsp;&nbsp;&nbsp;&nbsp;git&nbsp;remote&nbsp;update&nbsp;$REMOTE &nbsp;&nbsp;&nbsp;&nbsp;git&nbsp;remote&nbsp;show&nbsp;$REMOTE&nbsp;-n&nbsp;\&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;awk&nbsp;'/merges&nbsp;with&nbsp;remote/{print&nbsp;$5"&nbsp;"$1}'&nbsp;\&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;while&nbsp;read&nbsp;RB&nbsp;LB;&nbsp;do &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ARB="refs/remotes/$REMOTE/$RB"; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ALB="refs/heads/$LB"; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NBEHIND=$((&nbsp;$(git&nbsp;rev-list&nbsp;--count&nbsp;$ALB..$ARB&nbsp;2>/dev/null)&nbsp;+0)); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NAHEAD=$((&nbsp;$(git&nbsp;rev-list&nbsp;--count&nbsp;$ARB..$ALB&nbsp;2>/dev/null)&nbsp;+0)); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;[&nbsp;"$NBEHIND"&nbsp;-gt&nbsp;0&nbsp;];&nbsp;then &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;[&nbsp;"$NAHEAD"&nbsp;-gt&nbsp;0&nbsp;];&nbsp;then &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"&nbsp;branch&nbsp;$LB&nbsp;is&nbsp;$NBEHIND&nbsp;commit(s)&nbsp;behind&nbsp;and&nbsp;$NAHEAD&nbsp;commit(s)&nbsp;ahead&nbsp;of&nbsp;$REMOTE/$RB.&nbsp;could&nbsp;not&nbsp;be&nbsp;fast-forwarded"; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;elif&nbsp;[&nbsp;"$LB"&nbsp;=&nbsp;"$CLB"&nbsp;];&nbsp;then &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"&nbsp;branch&nbsp;$LB&nbsp;was&nbsp;$NBEHIND&nbsp;commit(s)&nbsp;behind&nbsp;of&nbsp;$REMOTE/$RB.&nbsp;fast-forward&nbsp;merge"; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;git&nbsp;merge&nbsp;-q&nbsp;$ARB; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"&nbsp;branch&nbsp;$LB&nbsp;was&nbsp;$NBEHIND&nbsp;commit(s)&nbsp;behind&nbsp;of&nbsp;$REMOTE/$RB.&nbsp;resetting&nbsp;local&nbsp;branch&nbsp;to&nbsp;remote"; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;git&nbsp;branch&nbsp;-f&nbsp;$LB&nbsp;-t&nbsp;$ARB&nbsp;>/dev/null; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi &nbsp;&nbsp;&nbsp;&nbsp;done &nbsp;&nbsp;done}main&nbsp;$@

慕姐8265434

您描述的行为pull --all完全符合预期,但不一定有用。该选项被传递给git fetch,然后从所有遥控器获取所有引用,而不仅仅是所需的引用;&nbsp;pull然后合并(或在你的情况下,rebase)适当的单个分支。如果你想查看其他分支机构,你将不得不检查它们。是的,合并(和重新定位)绝对需要一个工作树,所以如果不检查其他分支就无法完成。如果你愿意的话,你可以把你描述的步骤包装成一个脚本/别名,虽然我建议加入这些命令,&&这样如果其中一个失败了,它就不会尝试使用。
打开App,查看更多内容
随时随地看视频慕课网APP