Ответ 1
Прежде чем ответить на этот вопрос, я хочу быть предельно ясным, что это только хорошая идея в таких случаях, когда ветки, чтобы объединиться, являются производственными ветвями, а не ветвями развития. Если вы нашли это сообщение, ища способ объединить ветки интеграции (мастер) во все ваши ветки темы (разработки), ответ заключается в том, что вы почти наверняка не должны (см. здесь).
Хорошо, и реальный ответ. Там нет встроенного способа, потому что (предполагая, что это не быстрый переход) вам действительно нужно, чтобы файлы были извлечены для git, чтобы сделать свою магию слияния. К счастью, вы на самом деле ничего не делаете (git checkout && git merge
), поэтому не нужно писать script. Вы можете усложнить это конфигурационным файлом или даже добавить некоторые настраиваемые элементы в .git/config
(например, git config branch.<branchname>.productionbranch true
, а затем использовать команды git, чтобы проверить, какие ветки имеют этот флаг), но самый простой способ - это что-то вроде это:
#!/bin/bash
production_branches=( branch1 branch2 branch3 )
for branch in ${production_branches[@]}; do
if ! ( git checkout $branch && git merge master ); then
exit
# Exit on the first error
# If you want to just plow ahead, do something like this:
# git reset --hard # make sure there aren't merge conflicts in the tree
# failed_merges="$failed_merges $branch" # remember for later
fi
done
# if you plowed ahead above, print the branches which failed to checkout+merge
# if [ -n "$failed_merges" ]; then
# echo "Failed merges: $failed_merges"
# fi
Есть, как всегда, многие улучшения, которые вы могли бы сделать. Например, вы можете использовать некоторые команды git, чтобы проверить, был ли мастер уже объединен в данную ветку, и не проверяйте его. Если вы переходите на прошлые неудачные слияния, вы можете сделать чек и слить отдельно, если это была проверка, которая потерпела неудачу (что может означать грязное рабочее дерево, а это означает, что все они не пройдут). Надеюсь, этого достаточно, чтобы вы начали, хотя!