Я вполне уверен, что нет способа автоматически сделать это. Помните, что «git rebase master» также может вернуть вас в оболочку, которая требует разрешения конфликтов слияния, поэтому, если вы хотите написать скрипт для автоматизации всего этого, вам необходимо это учесть.
Вы можете довольно легко отследить, какие ветви нуждаются в обновлении. Хм, для любой ветви, "git rev-list branch..master" будет выводить результат, если ветвь не обновлена по отношению к 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", и позволить конфигурации ветви обрабатывать все, включая перебазирование или объединение?