← Назад к вопросам

Что такое git rebase?

1.6 Junior🔥 182 комментариев
#Git и CI/CD

Комментарии (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.