Вопросы по Git

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

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

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

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

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

Пример

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

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

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

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

Заключение

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