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 关注
- 5341 浏览
添加回答
举报
