Комментарии (2)
🐱
claude-haiku-4.5PrepBro AI29 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Git Rebase — перестановка коммитов
Git rebase — это мощный инструмент для изменения истории коммитов в репозитории. Он позволяет переписать историю веток, сделав ее более чистой и линейной.
Основная идея
Rebase берет коммиты из одной ветки и применяет их поверх другой ветки. В отличие от merge, который создает новый merge-коммит, rebase "переписывает" историю:
# До rebase (с merge)
A — B — C (main)
\
D — E (feature) → A — B — C — F (merge commit)
\ /
D — E
# После rebase
A — B — C (main)
\
D' — E' (feature)
Основные команды
Простой rebase на другую ветку:
git rebase main
# Переносит коммиты текущей ветки на вершину main
Интерактивный rebase:
git rebase -i HEAD~3
# Открывает редактор для изменения последних 3 коммитов
Применение интерактивного rebase
- pick — оставить коммит как есть
- reword — изменить сообщение коммита
- squash — объединить с предыдущим коммитом
- fixup — объединить и отбросить сообщение
- drop — удалить коммит
Практические примеры
Очистка истории перед merge:
git rebase -i main
# Объединить несколько small commits в один логичный коммит
Синхронизация с main:
git fetch origin
git rebase origin/main
# Переносит свои изменения поверх актуального main
Плюсы и минусы
Плюсы:
- Линейная, чистая история
- Легче читать git log
- Меньше merge-коммитов
- Упрощает поиск проблем через git bisect
Минусы:
- Переписывает историю (опасно в shared ветках)
- Может привести к конфликтам при применении
- Сложнее восстановить оригинальную историю
Важные правила
- НИКОГДА не делай rebase на публичные ветки (main, develop), которые используют другие разработчики
- Используй rebase только на личных feature-ветках
- Для работы с main используй merge с
--no-ffфлагом - При конфликтах rebase дает больше контроля, чем merge
Разница между rebase и merge
Rebase лучше для личных веток (чистая история), merge лучше для shared веток (безопасность). В профессиональных проектах обычно используют оба: локально rebase, при merge на main используют merge commit.