Поиск по сайту
Ctrl + K
Вопросы по Git

Как интерактивно изменить последние N коммитов?

Интерактивный rebase в Git — это мощный инструмент, который позволяет вам изменять историю коммитов. Он полезен, когда вы хотите переработать (объединить, изменить, удалить или переставить) последние N коммитов в вашей ветке. В этом ответе мы рассмотрим, как это сделать, и приведем примеры кода.

Шаги для интерактивного ребейза

  • Откройте терминал и перейдите в директорию вашего проекта.
  • Выполните команду rebase с флагом -i, указав количество коммитов, которые вы хотите изменить. Например, чтобы изменить последние 3 коммита, используйте:
    git rebase -i HEAD~3
    
  • Редактирование файла рефактирования. Откроется текстовый редактор (по умолчанию это может быть Vim или Nano), где вы увидите список ваших последних N коммитов. Каждая строка будет выглядеть примерно так:
    pick 1234567 Комментарий к первому коммиту
    pick 89abcde Комментарий ко второму коммиту
    pick fedcba9 Комментарий к третьему коммиту
    
  • Измените строки в соответствии с вашими целями:
    • Чтобы изменить коммит, замените pick на edit.
    • Чтобы объединить коммиты, замените pick на squash (или s).

    Например:
    edit 1234567 Комментарий к первому коммиту
    squash 89abcde Комментарий ко второму коммиту
    pick fedcba9 Комментарий к третьему коммиту
    
  • Сохраните изменения и закройте редактор. Если вы выбрали edit, то Git остановится на этом коммите, и вы сможете внести необходимые изменения:
    git commit --amend
    
  • После изменения коммита, продолжите rebase:
    git rebase --continue
    
  • Если вы выбрали squash, Git предложит вам редактировать сообщение коммита для объединённых коммитов. Внесите изменения, сохраните и закройте редактор.
  • Завершите процесс. После редактирования всех необходимых коммитов и завершения rebase, вы получите изменённую историю.
  • Пример

    Предположим, у вас есть следующие коммиты:

    1234567 - Исправление ошибки
    89abcde - Добавление новой функции
    fedcba9 - Обновление документации
    

    Если вы хотите объединить два последних коммита в один и изменить сообщение первого коммита, вам нужно будет выполнить следующие шаги:

  • Запустите:
    git rebase -i HEAD~3
    
  • Измените файл на:
    edit 1234567 Исправление ошибки
    squash 89abcde Добавление новой функции
    pick fedcba9 Обновление документации
    
  • Внесите свои изменения в коммит и завершите процесс.
  • Заключение

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