07. Rebasing

Перебазирование (rebase) — это альтернатива слиянию для задач объединения нескольких веток. Если слияние создаёт новый коммит с двумя родителями, оставляя нелинейную историю, то перебазирование применяет все коммиты один за одним из одной ветки в другую, оставляя за собой линейную историю коммитов. По сути это автоматическое выполнение нескольких команд cherry-pick подряд.

The general process can be visualized as the following:

alt text

From a content perspective, rebasing is changing the base of your branch from one commit to another making it appear as if you'd created your branch from a different commit. Internally, Git accomplishes this by creating new commits and applying them to the specified base. It's very important to understand that even though the branch looks the same, it's composed of entirely new commits.

Example

Команда берёт все коммиты, которые есть в ветке topic, но отсутствуют в ветке master (коммиты 169a6 and 2c33a), и воспроизводит их в ветке master. Затем указатель ветки перемещается на новое место. Следует заметить, что старые коммиты будут уничтожены сборщиком мусора, если на них уже ничего не будет ссылаться.

Используйте ключ --onto чтобы ограничить глубину захвата объединяемой ветки. На следующей схеме вы можете увидеть как в ветку master приходят лишь последние коммиты из текущей ветки, а именно коммиты после (но не включая) 169a6, т. е. 2c33a.

Interactive rebasing

git rebase -i позволяет организовывать коммиты во время rebase. С его помощью вы сможете сбросить некоторые коммиты (dropping), изменить их порядок (reordering), выполнить правку (modifying), или объединение (squashing) коммитов.

git rebase master --autostash

Last updated