Простое перебазирование коммитов в Git
Система Git предоставляет два способа внесения изменений при работе с ветками: слияние и перебазирование.
Достоинством перебазирования является то, что история коммитов обеих веток, в отличие от слияния, будет выглядеть более линейной и простой для восприятия членами команды, работающей на одним проектом.
В Git слияние, выполняемое с помощью
команды merge
, происходит как
трехстороннее объединение последних изменений
двух сливаемых веток и самого нового снимка
родительской ветки, общей для этих сливаемых веток.
При этом сливаются только конечные снимки
коммитов веток, а не вся их
предыдущая история.
Перебазирование предполагает применение изменений
из одной ветки (текущей) поверх другой ветки (которая сливается
с текущей). Давайте создадим ветку test
, в которой
мы сделаем новый файл file.txt
,
проиндексируем его и сделаем коммит:
git branch test
git switch test
git add file.txt
git commit -m "commit from branch test"
Теперь переключимся на ветку test
и перебазируем ее относительно главной
ветки master
:
git checkout test
git rebase master
Сам процесс перебазирования происходит следующим
образом: сначала Git делает снимок родительской ветки
master
, который сохраняется во временном файле. Затем
текущая ветка test
вставляет свои изменения
после самого последнего коммита ветки master
.
Теперь история коммитов основной ветки будет
выглядеть так:
После перебазирования история коммитов
ветки test
также будет выглядеть
аналогично ветке master
.
Затем этого можно перейти на ветку master
и выполнить слияние перемоткой,
т.е. master
снова станет главной и включит
в себя все изменения с ветки test
:
git merge test
Создайте две ветки test1
и test2
,
в каждой из которых будет по три коммита на
разные файлы, затем выполните их
слияние простым перебазированием.