# Простое перебазирование коммитов в 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`, в каждой из которых будет по три коммита на разные файлы, затем выполните их слияние простым перебазированием.

← →
↑