Ответ
Базовый коммит (base commit) в git rebase определяет точку, начиная с которой будут переприменены коммиты текущей ветки. Это позволяет изменить историю, переместив цепочку коммитов на новый "фундамент".
Почему это важно? Без указания базового коммита rebase по умолчанию использует upstream-ветку, что не всегда подходит для сложных манипуляций с историей.
Ключевое использование — флаг --onto:
git rebase --onto <new_base> <old_base> <branch>
<new_base>— коммит, на который будут перемещены изменения.<old_base>— последний общий коммит, который не должен быть перемещен (обычно точка ветвления).<branch>— ветка, чьи коммиты перебазируются.
Практический пример: Перенос коммитов из feature на main, минуя промежуточные коммиты в develop.
# Текущая история: main --- A --- B (feature)
#
# C --- D (develop)
# Цель: переместить B на main
git rebase --onto main develop feature
# Результат: main --- A --- B (feature)
#
# C --- D (develop)
Основные сценарии:
- Исправление точки ветвления — когда ветка ошибочно создана не от того коммита.
- Перенос коммитов между ветками — как в примере выше.
- Очистка истории — удаление слияний или промежуточных коммитов перед интеграцией.