В чем разница между amend и squash

«В чем разница между amend и squash» — вопрос из категории Git, который задают на 10% собеседований Frontend Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

amend и squash — это команды Git для изменения истории коммитов, но они работают по-разному:

git commit --amend

  • Перезаписывает последний коммит, добавляя новые изменения или изменяя его сообщение.
  • Не создает новый коммит, а модифицирует существующий.
  • Пример:
    git commit -m "Initial commit"
    # Добавляем изменения и исправляем коммит
    git add .
    git commit --amend -m "Updated initial commit"

git rebase -i + squash

  • Объединяет несколько коммитов в один во время интерактивного ребейза.
  • Позволяет "схлопнуть" несколько коммитов в один, сохраняя историю чище.
  • Пример (в интерактивном режиме ребейза):
    pick abc123 First commit
    squash def456 Second commit
    squash ghi789 Third commit

    Результат — один коммит с изменениями из всех трех.

Ключевое отличие:

  • amend — для правки последнего коммита,
  • squash — для объединения нескольких коммитов в один.

⚠️ Обе команды изменяют историю — используйте осторожно в общих ветках!