Squash Git - Упрощаем работу с вашими коммитами
Squash - это операция в Git, которая позволяет объединить несколько коммитов в один. Это применяется, когда мы хотим создать чистую и логически правильную историю коммитов, в которой каждый коммит решает только одну задачу.
Предположим, у нас есть следующая история коммитов:
commit 1234: Add new feature
commit 5678: Fix bugs in feature
commit 9101: Refactor code
Хотя все эти коммиты решают различные задачи, они все связаны с одной и той же функциональностью. Чтобы сделать историю коммитов чище и правильнее, мы можем объединить эти коммиты в один:
git rebase -i HEAD~3
Эта команда позволит нам изменить историю коммитов в последних трех коммитах. Она откроет файл в редакторе, который будет содержать список коммитов и их хэш-кодов. Мы можем изменить операции для каждого коммита, используя различные параметры.
Затем мы можем объединить эти коммиты, используя команду squash:
pick 1234 Add new feature
pick 5678 Fix bugs in feature
pick 9101 Refactor code
Заменяем pick на squash перед вторым и третьим коммитом:
pick 1234 Add new feature
squash 5678 Fix bugs in feature
squash 9101 Refactor code
Сохраняем изменения и закрываем файл. Git соберет все изменения из коммитов и поместит их в один коммит с описанием изменений всех трех коммитов.
Пример кода:
Допустим, у нас есть репозиторий, в котором было создано несколько коммитов:
$ git log --oneline
abc1234 Some commit message
def5678 Another commit message
ghi9012 Yet another message
Чтобы объединить эти коммиты, мы можем использовать команду rebase с параметром -i, который позволяет отредактировать историю коммитов:
$ git rebase -i HEAD~3
Открывается редактор с содержимым:
pick abc1234 Some commit message
pick def5678 Another commit message
pick ghi9012 Yet another message
Чтобы объединить второй и третий коммиты, помечаем их как squash:
pick abc1234 Some commit message
squash def5678 Another commit message
squash ghi9012 Yet another message
Сохраняем и закрываем файл. Git собирает изменения всех трех коммитов в один:
$ git log --oneline
jkl3456 Combined commit message
abc1234 Some commit message
Таким образом, мы объединили несколько коммитов в один и получили более чистую историю изменений.