Упорядочивание коммитов (rebase)

Упорядочивание коммитов и очистка истории

Что такое git rebase?

git rebase – это команда в Git, которая позволяет перемещать или объединять последовательность коммитов на новую базу. Основная цель rebase – упорядочить историю коммитов, создавая более линейную и читаемую последовательность изменений.

Основные характеристики

  • Изменение базы коммитов: git rebase переносит серию коммитов на новую базовую ветку.
  • Линейная история: Rebase создаёт более чистую, линейную историю изменений, избегая лишних коммитов слияния (merge commits).
  • Перезапись истории: Rebase перезаписывает историю коммитов, что делает его мощным, но потенциально опасным инструментом.

Синтаксис

git rebase <база>
  • <база> – ветка или коммит, на который вы хотите переместить текущую ветку.

Пример использования

  1. Обычное 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
    

Пример работы с конфликтами

  1. Выполните git rebase:

    git rebase main
    
  2. Если возникают конфликты, Git остановит процесс rebase и уведомит вас об этом. Разрешите конфликты, отредактировав соответствующие файлы.

  3. После разрешения конфликтов добавьте изменённые файлы:

    git add <файл-с-конфликтом>
    
  4. Продолжите процесс rebase:

    git rebase --continue
    
  5. Если необходимо, повторите шаги 2-4, пока все конфликты не будут разрешены и rebase не завершится.

Примечание

Использование git rebase перезаписывает историю коммитов, поэтому его следует использовать с осторожностью, особенно при работе с общими ветками. Никогда не выполняйте rebase на общих ветках, таких как main или master, если другие разработчики также работают с этими ветками.

Примеры использования

  1. Интерактивный rebase последних 5 коммитов:

    git rebase -i HEAD~5
    
  2. Rebase текущей ветки на другую базу:

    git rebase --onto new-base upstream-branch topic-branch