Гит — Сквош

Опубликовано: 1 Сентября, 2022

Предположим, вы создаете проект, используя Git в качестве системы управления версиями. Вы выпустили Версию 1 после того, как захотели добавить новые функции в Версию 2 и даже исправили несколько ошибок, обнаруженных в Версии 1. У вас накопилось много коммитов после первого релиза. Есть ли способ объединить все коммиты после 1-го релиза в один коммит? ДА, это возможно с помощью сквоша.

Squash — одна из полезных и мощных функций, доступных в интерактивном режиме команды git rebase.

Теперь у нас есть репозиторий под названием GFG_VIDEO, который представляет собой инструмент для видеоконференций с открытым исходным кодом. GFG_VIDEO выпустила первую версию своего инструмента с базовыми функциями, такими как одноранговые видеовызовы и сообщения с тегом R_V1 (зеленого цвета). После выпуска R_V1 команда GFG_VIDEO начала добавлять новые функции, такие как создание групп, групповые видеовызовы и исправление мелких ошибок из R_V1, таких как сбросы вызовов и т. д. Теперь GFG_VIDEO готов к своему новому выпуску R_V2. Если вы заметили, у нас есть 3 коммита от нашего первоначального коммита до R_V1 (1-й выпуск). После нашего R_V1 у нас есть 3 коммита для нашего R_V2 (2-й выпуск). Это выглядит неаккуратно и сложно для понимания. Здесь мы можем использовать концепцию Squash и объединить все коммиты после R_V1 до R_V2 в один коммит, что сделает наш журнал репозитория более аккуратным и удобным для отслеживания.

Реализация: Сосредоточение внимания на команде сквоша.

На изображении выше показано, что у нас есть 3 фиксации: первоначальная фиксация, фиксация 2, выпуск версии 1. Мы успешно выпустили первую версию (R_V1) инструмента GFG_VIDEO. После выпуска R_V1 добавлены новые функции и исправлены мелкие ошибки из предыдущего выпуска, и инструмент готов ко второму выпуску R_V2.

Приведенное выше изображение журнала GFG_VIDEO после выпуска 2-й версии. Можно заметить, что после выпуска версии 1 (тег: R_V1) есть 3 коммита для выпуска версии 2. Это выглядит неопрятно, чтобы упростить чтение, мы можем сделать операцию сквоша.

Давайте поиграем в сквош сейчас

git rebase -i HEAD~3 

rebase is an action to rewrite commits and it’s history -i is to enter into interactive mode of rebase HEAD~n states to perform our operation on n commits from HEAD

После ввода вышеуказанной команды мы получим интерактивный редактор со всеми выбранными нами коммитами, где мы будем выполнять сквош.

Мы видим, что мы выбрали 3 фиксации в начале интерактивного редактора, ниже мы видим список команд, таких как выбор, переформулировка, редактирование, сквош и т. д.

Задача: раздавить 2-й и 3-й коммиты с 1-м коммитом, поэтому мы изменим первое слово с pick на squash.

whichever commits we want to squash we have to change it to squash from pick

После изменения фиксации с выбора на сквош сохраните файл и закройте его. Сразу же откроется другой редактор, где мы должны ввести последнее сообщение фиксации.

Введите последнее сообщение коммита и прокомментируйте оставшиеся старые сообщения.

После добавления последнего сообщения фиксации сохраните файл и выйдите из него. Теперь он показывает, что перебазирование прошло успешно.

Теперь, если мы видим наш журнал GFG_VIDEO, мы можем наблюдать, как наши 3 коммита после выпуска версии 1 сжаты в 1 коммит.