我相当确定没有办法自动执行此操作。请记住,“git rebase master”也可以让你回到需要你解决合并冲突的 shell,所以如果你想编写一个脚本来自动化所有这些,你需要考虑到这一点。
不过,您可以相当轻松地跟踪哪些分支需要更新。嗯,对于任何分支,“git rev-list branch..master”如果分支不是最新的 wrt(即仅在其之上提交)master 将产生输出。因此,您需要遍历除 master 之外的所有本地负责人以生成报告(nb "git show-branch" 将大致执行此操作):
git for-each-ref 'refs/heads/*' | \
while read rev type ref; do
branch=$(expr "$ref" : 'refs/heads/\(.*\)' )
revs=$(git rev-list $rev..master)
if [ -n "$revs" ]; then
echo $branch needs update
git diff --summary --shortstat -M -C -C $rev master
fi
done
因此,如果您有勇气,可以将“git diff”替换为“git checkout $branch && git rebase master”(或者如果您设置了“git pull --rebase”)。我认为您必须检查是否存在“.git/rebase-apply”目录或检查未合并文件的索引(“git ls-files -u”)以测试我们是否一直在等待做一个合并。
当然,如果没有冲突,那么这很容易......它会产生一些在不容易的时候也能工作的东西,这就是问题所在:p
这并不一定能解决如果你的一个分支基于其他东西会发生什么......这就是为什么我提到使用“git pull --rebase”,因为这将根据分支配置重新设置,而不是盲目地从主. 虽然检测不是基于分支配置......也许最简单的方法是检查每个分支并执行“git pull”并让分支配置处理所有事情,包括是否变基或合并?