Вы можете видеть, что все веб-пользователи советуют не использовать git rebase
в публичном ветке, но я не вижу, в чем проблема, если вы всегда переустанавливаете ветвь функции.
Моя команда всегда использует ветки для функций (wow), мы привыкли иметь ее только локально, поэтому rebase не является проблемой, но иногда мы хотим показать код частично выполненной функции другому разработчику, поэтому мы просто публиковать его, но затем мы теряем все преимущества git rebase
или, по крайней мере, того, что вы можете читать в Интернете.
Я не понимаю, в чем проблема, если разработчики, работающие в одном и том же публичном филиале, никогда не объединяют его ни с одной веткой (когда еще есть разработка на этой ветке), и когда они ее вытаскивают, они делают это с помощью операции переадресации, Любые изменения, внесенные в ветку, всегда будут перебазироваться поверх удаленной ветки, поэтому никогда не будут потеряны, и у вас не будет проблемы с дублированием одной и той же фиксации.
Добавить 1:
Ни один из ответов до сих пор не показал проблемы, которые произойдут и как это произойдет, поэтому я постараюсь быть более ясными.
Я приведу пример рабочего процесса с использованием rebase (плохо описанный в предыдущих параграфах, извините), что я не вижу никаких проблем.
Исходное состояние:
master ==========A
origin/feature +=====AB
feature user A +=====AB
feature user B +=====AB
master получает несколько коммитов, а пользователь A делает несколько коммитов:
master ==========A=====C
origin/feature +=====AB
feature user A +=====AB====D
feature user B +=====AB
Пользователь A делает git pull --rebase
(он всегда делает это), чтобы обновить свою ветку, ничего нового не приходит, затем он переустанавливает мастер и нажимает:
master ==========A=====C
origin/feature +=====ACB'=====ACB'D
feature user A +=====ACB'=====ACB'D
feature user B +=====AB
(обратите внимание, что B '- это новые фиксации, которые все еще представляют изменения B)
Затем пользователь B выполняет несколько коммитов:
master ==========A=====C
origin/feature +=====ACB'=====ACB'D
feature user A +=====ACB'=====ACB'D
feature user B +=====AB======E
Пользователь B, наконец, делает git pull --rebase
, как всегда, нет необходимости переустанавливать мастер, поэтому он просто толкает:
master ==========A=====C
origin/feature +=====ACB'=====ACB'D======E'
feature user A +=====ACB'=====ACB'D
feature user B +=====ACB'=====ACB'D======E'