Слияние изменений с мастером во все ветки с помощью Git?

Я использую git для поддержки нескольких рабочих копий моего кода. Идея состоит в том, что я могу проверить любую ветвь, построить и запустить ее, чтобы увидеть, как функция ветки x вписывается в текущее состояние кода.

Git главная ветвь - это Trunk, а другие ветки git - это функции или вещи, которые я хотел бы попробовать. Поэтому мое типичное использование обновляет мастер с последними исправлениями, а затем объединяет мастера в отдельные ветки, поэтому каждый из них остается актуальным.

Эта система работает хорошо для меня, за исключением того факта, что мне нужно проверить ветку, объединить мастер и полоскать/повторить для других ветвей. Учитывая систему управления версиями, такую ​​как git, я не вижу этого масштабирования очень хорошо, учитывая тот факт, что я был бы склонен к тому, чтобы создавать множество веток с течением времени.

Я все еще новичок git, поэтому я подозреваю, что может существовать механизм сорта, который git уже имеет, что я могу отсутствовать. Есть ли это? Если нет, то как совершить изменение для всех ветвей, чтобы они не обновлялись самостоятельно?

Ответ 1

Одна возможность (не проверенная сама):

  • установить голое репо, в котором вы можете нажать главную ветвь.
  • у вас есть крюк после приема (см. githooks man page) на этом голом репо, который затем будет нажимать мастер на каждой "функции" репо вы хотите
  • У вас есть пост-приемный крючок на функцию репо для начала:
    • переадресация вашей ветки функций поверх мастера (отлично, если вы еще не нажали свою ветку функций в другом месте).
    • или слияние мастера в вашей ветке свойств.

Вам все равно нужно перейти к репозиторию функций и проверить, не заблокирован ли rebase или merge из-за конфликтов слияния.

Ответ 2

Если

  • ветки, которые вы хотите объединить с последними мастерами, не публикуются И
  • вы хотите, чтобы все коммиты в master были в других ветвях.

то вы можете просто переустановить их на мастер после обновления мастера. Этот маленький script может работать, если вы используете оболочку Unix. Он переустанавливает каждую ветвь на мастер.

for BRANCH in `ls .git/refs/heads`; do git rebase master $BRANCH; done

Ответ 3

Я делаю следующее:

for BRANCH in $(ls git/refs/heads); do git checkout $BRANCH ; git merge origin/master $BRANCH ; done