Skip to main content

Слияние веток (merge/rebase/fast-forward)

TODO

SRC:

https://selectel.ru/blog/tutorials/how-to-rebase-commits-and-branches/

 

ВОбъединить чемдве разница?ветки в гите можно по разному:

    rebase - создание новых, но таких же коммитов

    merge - перенос коммитов в ветку как есть, без пересоздания

    Результат один и тот же - (условно) ветка master будет в нашей ветке где мы работаем. У нас будут актуальные изменения из мастера и мы не потеряем наши наработки.

    Rebase: В этом случае наши коммиты будут удалены и добавлены в конец к мастер ветке, в отличие от merge, когда коммиты объединяются между собой. Т.е. в итоге коммиты в нашей ветке будут такие:

      Наше изменение Наше изменение Наше изменение Изменения из мастера ...

      В случае с merge мы получим такое:

        Наши изменения Мастер Мастер Наши изменения Мастер ... Наши измезения ...

        Очевидно, что использовать rebase гораздо удобнее, т.к. наши изменения будут в конце и их будет проще рассматривать, после мержа в мастер не надо будет искать, какие изменения были внесены, они будут идти друг за другом и все будет понятно.

        Также при rebase коммиты применяются к мастеру один за другим, поэтому будет проще разобаться в конфликтах, т.к. будут видны изменения на момент самого старшего коммита нашей ветки и будет проще понять, в какой момент нам помешали.

         

        Однако у rebase есть и минусы.

          Теряется история коммитов, а именно их дата и хеши. Может быть переписан текст коммитов (что с одной стороны может быть полезно, в некоторых ситуациях) Коммиты могут быть объединены (что также может быть полезно в некоторых ситуациях). При git merge невозможно объединить коммиты