Я читал, что мне не следует переустанавливать ветку функции (чтобы обновить ее изменениями из мастера, чтобы позже разрешить бесконфликтное слияние), когда она уже помещена в общее репо, если я не знаю последствий.
Так каковы последствия?
Я единственный разработчик в этой функциональной ветке, и я не забочусь о себе, если я перепишу на нем историю. Но каковы последствия для других?
Я перечислил некоторые вещи, которые мог придумать. Пожалуйста, поправьте меня и добавьте еще, если знаете.
Последствия для людей, которые основывают свою работу на вашей ветке до перебазирования. Подумайте, что произойдет, если вы сделали 3 ревизии в своей функциональной ветке, а разработчик B затем запустил ветку из вашей ветки и выполнил 3 коммита ... затем вы перебазируете ... затем, в конечном итоге, ваша ветка будет объединена, скажем, с master. Приятно ...... что другой разработчик заканчивает после 3 ревизий и просит слиться. Как будет выглядеть история, если эту ветвь объединить напрямую? У него будут дубликаты для ваших 3 коммитов (исходные ревизии и те, которые появились после вашего перебазирования) ... не лучшее, что нужно иметь, верно? В этом случае другой разработчик должен был выполнить перебазирование поверх вашей перебазированной ветки или мастера после того, как они были объединены. Другой сложный сценарий - это когда вы переустанавливаете общую ветку и никому об этом не говорите. Предположим, вы исправляете последние 3 версии мастера и нажимаете принудительно, чтобы заменить общий мастер .... если у вас есть разработчики, которые уже работают с исходным мастером, когда они попытались отправить изменения в эту ветку, они не будут разрешено, потому что ветки разошлись, и они не объединили новый мастер (и им лучше этого не делать, потому что вы снова получите дублирующиеся ревизии ... они также должны быть перебазированы).
Лично мне? Я думаю, что все должно быть перебазировано, когда это имеет смысл ... усложнение для людей, работающих над одним и тем же проектом, не должно быть серьезной проблемой, поскольку решение таких проблем включает только выполнение одной операции перебазирования:
git rebase --onto new-rebased-branch old-rebased-branch my-branch
. Таким образом, не похоже, что очень сложно перемещать вещи после того, как ветка была перебазирована. Уловка состоит в том, чтобы заставить других разработчиков знать, что история переписывается, чтобы они могли перебазировать свою ветку.