Что может пойти не так после того, как я произвожу толчок после перебазировки, и другие члены команды попытаются вытянуть эти ветви (опять же, просто чтобы посмотреть их, они не внесли никаких изменений)?
Ничто не может пойти "не так". Худшее, что может случиться, это то, что у «зрителей» возникнут лишние проблемы со слиянием, поскольку ваши новые принудительно сделанные коммиты могут выглядеть совершенно по-другому, и теперь их извлечение (то есть извлечение и слияние) приводит к конфликтам слияния .
Стоит ли этого избегать, даже когда я являюсь единственным разработчиком в этих двух ветках, связанных с перебазированием?
Хотя перебазирование позволяет вам иметь аккуратную и линейную историю мерзавцев и определенно имеет свои преимущества, вот некоторые мысли о том, почему «слияние» иногда может быть предпочтительнее, чем «перебазирование», даже если вы находитесь в "напиши" -контроль над вашими ветками:
1) Чтобы избежать необратимого удаления кода в результате неправильных решений во время конфликтов слияния.
Пример. Допустим, вы работали над своей веткой функций A
в течение двух недель, а теперь вы перестаете работать над ней и вместо этого продолжаете работу над веткой B
в течение двух недель. Теперь, спустя некоторое время, вы чувствуете, что пришло время снова поработать с веткой A
, и по какой-то причине вам нужны изменения, содержащиеся в B
, включенном в A
, поэтому вы решили перенести ветку A
на B
. В ходе этой перезагрузки возникает несколько конфликтов слияния. Из-за неправильного суждения или по чистой случайности вы удаляете части своего кода в A
, чтобы разрешить конфликты в пользу входящих изменений. Теперь вы продолжаете и завершаете ребазинг и принудительно отправляете свой код на origin/A
вашего пульта. Внезапно вы понимаете, что вы удалили части своего кода в ветке A
, которые были важны и не должны были быть удалены. Однако, поскольку rebase переписывает историю, в отличие от слияния, вы не можете просто отменить восстановление, и ваш код потерян.
Ситуация, описанная выше, особенно проблематична, если вы говорите младшим в вашей команде, что они всегда предпочитают rebase, а не merge, и они случайно удаляют свой код, принимая неправильные решения в ходе конфликтов слияния, особенно когда ребас переходит на * 1031. *.
Конечно, решением этой проблемы, кроме использования git merge
, было бы создание резервной ветви перед выполнением ребазинга.
2) Чтобы избежать решения слишком большого количества конфликтов при интерактивной перебазировке.
Когда ваша ветвь функций содержит несколько коммитов, то есть вы перемещали код совсем немного и, возможно, даже назад и вперед, тогда перебазировка может занять намного больше времени, чем слияние, потому что перебазировка будет идти в последовательности ( !) через коммиты вашей ветки один за другим и останавливается на каждом обнаруженном конфликте. При слиянии вы будете сравнивать только текущее состояние, то есть HEAD
вашей функциональной ветви, с HEAD
ветви, на которую вы перебазируете (например, master
), и, возможно, конфликты отсутствуют вообще при выполнении слияния, хотя могут быть некоторые конфликты при выполнении ребазирования. Так что в этом смысле слияние потенциально экономит ваше время.