О git

Слитие изменений нескольких веток


Одним из вариантов сливать изменения из двух веток является git merge. Работает эта команда следующим образом: берётся общий коммит для двух веток, последние коммиты двух веток и производится их слияние, результатом чего является ещё один коммит в той ветке, в которую выполнялось слияние. По сути, сливаются все изменения обеих веток, начиная от общего
коммита. Причём этот коммит является потомком сразу двух – последних коммитов сливаемых веток. Если сразу после операции слияния надо включить образовавшийся коммит в историю
коммитов той ветки, из которой производилось слияние, нужно переключиться на ту ветку и сделать git merge <название той ветки, в которую произведено слияние>. В данном случае будет так называемый fast forward merge. Возникает fast forward merge тогда, когда коммит, на который указывает ветка, которую мы сливаем, является прямым потомком того коммита, на который
указывает текущая ветка (возможно, через другой (другие) коммиты(ы) ). То есть происходит перемотка указателя текущей ветки вперёд.
Есть ещё один вариант объединения изменений из двух веток – перебазирование, git rebase. Работает git rebase так: git находит общий для обеих веток коммит, после чего последовательно применяет изменения каждого коммита перебазируемой ветки поверх последнего коммита “базовой” ветки. Синтаксис команды такой: git rebase <название базовой ветки> (текущая ветка является перебазируемой). Более продвинутый вариант использования git rebase – это применение опции —onto. Синтаксис таков: git rebase –onto <название базовой ветки> <коммит, предшествующий первому перебазируемому> <имя перебазируемой ветки> В результате выполнения команды коммиты перебазируемой ветки, начиная от “первого за предшествующим”.
Если в процессе rebase возникает конфликт и выбираем –skip , то изменения “скипнутого” коммита не будут применены, коммит будет пропущен при перебазировании
git rebase –I <базовый коммит (хэш-код или имя ветки)> Доступен набор опций:

  • выборочное объединение коммитов (squash)
  • изменение описания выбранных коммитов (reword)
  • удаление выбранных коммитов (drop)
  • редактирование выбранных коммитов (edit).

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

Назад

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *