3 回答
TA贡献1785条经验 获得超8个赞
我知道这个问题已经快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个或多个提交,则可以快速转发
git branch -f <LOCAL_BRANCH> -t <REMOTE_BRANCH>
该脚本可以像:
$ git ffwd-updateFetching origin branch bigcouch was 10 commit(s) behind of origin/bigcouch. resetting local branch to remote branch develop was 3 commit(s) behind of origin/develop. resetting local branch to remote branch master is 6 commit(s) behind and 1 commit(s) ahead of origin/master. could not be fast-forwarded
完整的脚本应该保存为git-ffwd-update
并且需要在PATH
。
#!/bin/bashmain() { REMOTES="$@"; if [ -z "$REMOTES" ]; then REMOTES=$(git remote); fi REMOTES=$(echo "$REMOTES" | xargs -n1 echo) CLB=$(git rev-parse --abbrev-ref HEAD); echo "$REMOTES" | while read REMOTE; do git remote update $REMOTE git remote show $REMOTE -n \ | awk '/merges with remote/{print $5" "$1}' \ | while read RB LB; do ARB="refs/remotes/$REMOTE/$RB"; ALB="refs/heads/$LB"; NBEHIND=$(( $(git rev-list --count $ALB..$ARB 2>/dev/null) +0)); NAHEAD=$(( $(git rev-list --count $ARB..$ALB 2>/dev/null) +0)); if [ "$NBEHIND" -gt 0 ]; then if [ "$NAHEAD" -gt 0 ]; then echo " branch $LB is $NBEHIND commit(s) behind and $NAHEAD commit(s) ahead of $REMOTE/$RB. could not be fast-forwarded"; elif [ "$LB" = "$CLB" ]; then echo " branch $LB was $NBEHIND commit(s) behind of $REMOTE/$RB. fast-forward merge"; git merge -q $ARB; else echo " branch $LB was $NBEHIND commit(s) behind of $REMOTE/$RB. resetting local branch to remote"; git branch -f $LB -t $ARB >/dev/null; fi fi done done}main $@
TA贡献1813条经验 获得超2个赞
您描述的行为pull --all
完全符合预期,但不一定有用。该选项被传递给git fetch,然后从所有遥控器获取所有引用,而不仅仅是所需的引用; pull
然后合并(或在你的情况下,rebase)适当的单个分支。
如果你想查看其他分支机构,你将不得不检查它们。是的,合并(和重新定位)绝对需要一个工作树,所以如果不检查其他分支就无法完成。如果你愿意的话,你可以把你描述的步骤包装成一个脚本/别名,虽然我建议加入这些命令,&&
这样如果其中一个失败了,它就不会尝试使用。
- 3 回答
- 0 关注
- 5171 浏览
添加回答
举报