Упорядочивание коммитов (rebase)
Что такое git rebase?
git rebase
– это команда в Git, которая позволяет перемещать или объединять последовательность коммитов на новую базу. Основная цель rebase – упорядочить историю коммитов, создавая более линейную и читаемую последовательность изменений.
Основные характеристики
- Изменение базы коммитов:
git rebase
переносит серию коммитов на новую базовую ветку. - Линейная история: Rebase создаёт более чистую, линейную историю изменений, избегая лишних коммитов слияния (merge commits).
- Перезапись истории: Rebase перезаписывает историю коммитов, что делает его мощным, но потенциально опасным инструментом.
Синтаксис
git rebase <база>
<база>
– ветка или коммит, на который вы хотите переместить текущую ветку.
Пример использования
- Обычное rebase:
Эта команда перемещает коммиты из ветки
git checkout feature-branch git rebase main
feature-branch
на вершину веткиmain
.
Полезные флаги и опции
-
-i
или--interactive
: Включает интерактивный режим, позволяя изменять, объединять или удалять коммиты.git rebase -i HEAD~3
-
--onto
: Позволяет указать новую базу для ветки, отличную от базовой ветки.git rebase --onto <новая-база> <старая-база> <ветка>
-
--continue
: Продолжает процесс rebase после разрешения конфликтов или редактирования коммита.git rebase --continue
-
--abort
: Прерывает процесс rebase и возвращает репозиторий в состояние до начала rebase.git rebase --abort
-
--skip
: Пропускает текущий коммит и продолжает процесс rebase.git rebase --skip
Пример работы с конфликтами
-
Выполните
git rebase
:git rebase main
-
Если возникают конфликты, Git остановит процесс rebase и уведомит вас об этом. Разрешите конфликты, отредактировав соответствующие файлы.
-
После разрешения конфликтов добавьте изменённые файлы:
git add <файл-с-конфликтом>
-
Продолжите процесс rebase:
git rebase --continue
-
Если необходимо, повторите шаги 2-4, пока все конфликты не будут разрешены и rebase не завершится.
Примечание
Использование git rebase
перезаписывает историю коммитов, поэтому его следует использовать с осторожностью, особенно при работе с общими ветками. Никогда не выполняйте rebase на общих ветках, таких как main
или master
, если другие разработчики также работают с этими ветками.
Примеры использования
-
Интерактивный rebase последних 5 коммитов:
git rebase -i HEAD~5
-
Rebase текущей ветки на другую базу:
git rebase --onto new-base upstream-branch topic-branch