Этот процесс описывает интерактивный rebasing с squashing в локальном Git репозитории, позволяющий объединить несколько коммитов в один с помощью команды git rebase.
Подготовка
Создадим новую ветку (feature-2) с несколькими коммитами, которые затем объединим с помощью интерактивного rebasing.
- Создаём новую ветку: git checkout -b feature-2
- Создаём файлы и фиксируем изменения:
touch file4.txt git add . git commit -m "file4 was created in the feature-2 branch" touch file5.txt git add . git commit -m "file5 was created in the feature-2 branch" touch file6.txt git add . git commit -m "file6 was created in the feature-2 branch"
- Проверяем историю: git log
Интерактивный Rebase
Интерактивный rebasing с squashing выполняется командой git rebase -i. Аргументом служит SHA-1 хеш коммита, предшествующего тем, которые нужно объединить.
- Находим SHA-1 хеш коммита, предшествующего коммитам в feature-2.
- Запускаем git rebase -i <SHA-1 хеш>, где <SHA-1 хеш> — найденный хеш.
- Откроется текстовый редактор со списком коммитов.
- Заменяем pick (или p) на squash (или s) перед каждым коммитом для объединения.
- Сохраняем изменения.
- Git создаст новый коммит, объединяющий выбранные, с сообщением, составленным из сообщений объединённых коммитов. Его можно отредактировать.
- После rebasing история будет содержать один объединённый коммит.
Объединение с основной веткой
После squashing, объединим feature-2 с основной веткой (master).
- Переключаемся на основную ветку: git checkout master
- Объединяем ветку feature-2: git merge -v feature-2
- Проверяем историю: git log История будет содержать новый объединённый коммит.
Интерактивный rebase с squashing упрощает и делает более читаемой историю коммитов, объединяя несколько в один. Хотя на GitHub это проще, данный метод полезен локально. Ключевой элемент — git rebase -i с заменой pick на squash.