git rebase: основы
Перенос коммитов из одной ветки на вершину другой — для создания линейной, чистой истории без лишних merge-commit-ов.
Зачем нужно
Пока разработчик работает в feature-ветке, main продолжает обновляться. git rebase «перебазирует» feature-ветку — берёт все её коммиты и повторно применяет их поверх актуального состояния main. Результат — линейная история без «ромбов» от merge. Многие команды предпочитают rebase-workflow, потому что история читается как единая цепочка событий.
Где используется
- Актуализация feature-ветки перед созданием Pull Request
- Поддержка линейной истории в проектах с rebase-политикой
git pull --rebase— загрузить изменения без merge-commit- Очистка истории перед merge через интерактивный rebase
Основной контент
Как работает rebase
До rebase:
main: A---B---E---F
\
feature: C---D
После git rebase main (из ветки feature):
main: A---B---E---F
\
feature: C'---D'
Коммиты C и D «пересозданы» как C' и D' с новыми хэшами поверх F.
Команды
# Перебазировать текущую ветку на main
git switch feature/auth
git rebase main
# Если возник конфликт — разрешить, добавить в staging и продолжить
git add src/auth.js
git rebase --continue
# Пропустить конфликтный коммит (редко нужно)
git rebase --skip
# Прервать rebase и вернуться к исходному состоянию
git rebase --abort
# Rebase конкретной ветки на другую
git rebase main feature/auth
# Pull через rebase (не создаёт merge-commit)
git pull --rebase origin main
Типичный workflow с rebase
# 1. Работаем в feature-ветке
git switch feature/payment
# 2. Main обновился — актуализируем ветку
git fetch origin
git rebase origin/main
# 3. Разрешаем конфликты если есть
# ... редактируем файлы ...
git add .
git rebase --continue
# 4. Push с --force-with-lease (хэши коммитов изменились)
git push --force-with-lease origin feature/payment
# 5. Создаём PR — история чистая и линейная
Rebase vs Merge: когда что использовать
| Ситуация | Что использовать |
|---|---|
| Публичная ветка (main, develop) | Merge |
| Личная feature-ветка | Rebase |
git pull в командном проекте |
git pull --rebase |
| Сохранить историю ветки | Merge --no-ff |
Золотое правило rebase: никогда не делай rebase ветки, которую используют другие разработчики.
Частые ошибки
- Rebase опубликованной ветки без
--force-with-lease— хэши изменились, обычный push будет отклонён --forceвместо--force-with-lease—--forceперезапишет удалённую ветку даже если кто-то уже push-нул в неё- Rebase общей ветки — коллеги получат конфликты истории при следующем pull; rebase только личных веток
- Не прерывать rebase при запутанных конфликтах — лучше
git rebase --abortи разобраться с ситуацией
Связанные темы
- _MOC Git
- git rebase -- интерактивный
- git merge -- слияние веток
- Разрешение конфликтов
- git remote, push, pull