PassFront
  1. PassFront
  2. База знаний
  3. Слияние, rebase и конфликты

Как в Git объединить два коммита в один?

Слияние, rebase и конфликты

Несколько последних коммитов объединяют в один через интерактивный rebase или soft reset.

Интерактивный rebase

git rebase -i HEAD~2

В открывшемся списке у второго коммита меняем pick на squash (или fixup, чтобы не сохранять его сообщение), сохраняем и редактируем итоговое сообщение.

Через soft reset

git reset --soft HEAD~2
git commit -m "Форма логина с валидацией"

--soft убирает коммиты, но оставляет изменения проиндексированными, и их можно закоммитить заново одним коммитом.

При слиянии PR

На GitHub и GitLab есть кнопка Squash and merge — вся ветка превращается в один коммит в основной ветке.

Нюансы

Это переписывание истории: если коммиты уже запушены, понадобится git push --force-with-lease, а для общих веток так делать нельзя.

Коротко для собеседования

git rebase -i HEAD~N и squash, либо git reset --soft HEAD~N и новый коммит; для запушенных веток — только с force-with-lease и осторожно.

Подробнее: Pro Git — перезапись истории

Другие вопросы раздела