Git squash merge или git force push?

Мы используем gitlab. Основная ветвь защищена, и только владельцы проекта могут отправлять/принимать запросы на слияние в основную ветку. Другие разработчики отправляют запрос на слияние, чтобы получить свой код в master.

Когда мы отправляем запросы на слияние (из фиче-ветки в master), один из разработчиков просматривает код. Если есть какие-либо предложения/комментарии, разработчик обновляет свой код, и в мерж-реквесте также отображаются новые коммиты.

Затем QA начинает тестирование ветки, разработчик исправляет ошибки в этой же ветке. Когда все готово и готово к работе, QA добавляет в мерж-реквест комментарий о том, что он протестирован.

Поскольку коммитов много, а функция одна, чтобы упростить управление, мы хотели бы просто отправить ее как один коммит.

Вот где владелец проекта и я противоречим. Я прошу владельца проекта сделать git merge --squash, но он просит меня перебазировать мою ветку, втиснув все в последний коммит, и выполнить принудительное нажатие. Поскольку ветвь после этого умрет, его аргумент в том, что это вряд ли вызовет какие-либо проблемы.

Итак, как лучше всего следовать здесь?

P.S. В gitlab нет опции графического интерфейса для слияния сквоша, и единственная доступная опция — это слить все коммиты как есть.


person Senthil Kumar    schedule 16.10.2012    source источник


Ответы (1)


Результат обеих операций очень похож: фиксация поверх master и функциональная ветвь, которая в конечном итоге умрет.

Слияние --squash заставляет владельца проекта заботиться о возможных конфликтах. Чтобы избежать этой проблемы, вам нужно будет объединить origin/master в вашей функциональной ветке непосредственно перед слиянием.

После этого единственная разница в конечном результате заключается в том, куда указывает ветвь функции после операций:

  1. После merge origin/master, merge --squash: ветка функций будет указывать на умирающую ветку, которая в конечном итоге умрет, но будет несколько запутанной: она уже объединена?
  2. После rebase, force push, merge --ff ветвь функции будет указывать на раздавленный коммит.

Вы должны решить:

  • процесс, который заставляет вас «удалять» ветки функций, делая явным выбором сохранение истории ветвей функций (путем создания новой ссылки перед перебазированием и отправки ее — возможно, с обновленным именем: featureA_merged)
  • процесс, который сохраняет все ветки функций, но заставляет вас помнить / управлять тем, какие ветки были объединены.

ИМХО, в конце концов, rebase и force push - более чистое решение. Вы заботитесь о потенциальных конфликтах и ​​перемещаете ссылку из умирающей ветки, которая может вызвать проблемы и/или путаницу в будущем. Даже делая что-то, что сейчас выглядит неправильным, толкайте силой.

person Vicente Quintans    schedule 17.10.2012