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