Менял ли коммиты в Git?

«Менял ли коммиты в Git?» — вопрос из категории DevOps, который задают на 25% собеседований C/C++ Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, регулярно. Изменение истории коммитов — стандартная практика для поддержания ее чистоты и понятности перед тем, как отправить изменения в общий репозиторий.

  • Исправление последнего коммита (git commit --amend): Использую, чтобы добавить забытый файл или исправить сообщение коммита прямо перед пушем.
    # Добавил пропущенный файл и перезаписал коммит
    git add forgotten_feature.cpp
    git commit --amend -m "feat: add new parsing algorithm"
  • Перебазирование (git rebase -i): Привожу в порядок серию локальных коммитов: объединяю (squash) несколько мелких коммитов в один логичный, переписываю сообщения (reword) или меняю порядок. Это делает историю более читаемой.
    git rebase -i HEAD~5  # Интерактивно редактирую последние 5 коммитов
    # В редакторе можно выбрать 'squash', 'reword', 'edit'
  • Изменение уже отправленных коммитов: Этого следует избегать в общей ветке (например, main/master), так как это переписывает историю для всех. Однако в рамках своей feature-ветки перед созданием пулл-реквеста я всегда делаю rebase на актуальную main и привожу свои коммиты в порядок, чтобы ревьюверам было легче их читать.

Золотое правило: Изменять можно только ту историю, которую еще не видели другие (т.е. локальные или лежащие в вашей личной ветке коммиты).