07. Rebasing
Last updated
Was this helpful?
Last updated
Was this helpful?
Перебазирование (rebase) — это альтернатива слиянию для задач объединения нескольких веток. Если слияние создаёт новый коммит с двумя родителями, оставляя нелинейную историю, то перебазирование применяет все коммиты один за одним из одной ветки в другую, оставляя за собой линейную историю коммитов. По сути это автоматическое выполнение нескольких команд cherry-pick
подряд.
The general process can be visualized as the following:
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.
Команда берёт все коммиты, которые есть в ветке topic
, но отсутствуют в ветке master (коммиты 169a6
and 2c33a
), и воспроизводит их в ветке master
. Затем указатель ветки перемещается на новое место. Следует заметить, что старые коммиты будут уничтожены сборщиком мусора, если на них уже ничего не будет ссылаться.
Используйте ключ --onto
чтобы ограничить глубину захвата объединяемой ветки. На следующей схеме вы можете увидеть как в ветку master приходят лишь последние коммиты из текущей ветки, а именно коммиты после (но не включая) 169a6
, т. е. 2c33a
.
git rebase -i
позволяет организовывать коммиты во время rebase
. С его помощью вы сможете сбросить некоторые коммиты (dropping
), изменить их порядок (reordering
), выполнить правку (modifying
), или объединение (squashing
) коммитов.