Ответ 1
Я уверен, что нет возможности автоматически сделать это. Помните, что "git мастер перезаписи" также может вернуть вас в оболочку, требующую разрешения конфликтов слияния, поэтому, если вы хотите написать script для автоматизации всего этого, вам нужно принять это во внимание.
Вы можете довольно легко отслеживать, какие ветки нуждаются в обновлении. Hmm, для любой ветки "git rev-list branch..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 master basase" (или, может быть, просто "git pull - -rebase", если вы это установили). Я думаю, вам нужно будет проверить наличие каталога ".git/rebase-apply" или проверить индекс для несвязанных файлов ( "git ls-files -u" ), чтобы проверить, остались ли мы ожидая слияния.
Конечно, если конфликтов нет, то легко... он создает что-то, что также работает, когда нелегко, что проблема: p
И это не обязательно относится к тому, что происходит, если один из ваших ветвей основан на чем-то еще... поэтому я упомянул об использовании "git pull -rebase" вместо этого, потому что это было бы rebase в соответствии с конфигурацией ветки, а не слепо от мастера. Хотя обнаружение не основано на конфигурации ветки... возможно, было бы проще всего проверить каждую ветку и сделать "git pull" и разрешить конфигурацию ветки обрабатывать все, в том числе, нужно ли пересобирать или объединять?