Интерактивный Rebase с Squashing в Git: пошаговое руководство

Этот процесс описывает интерактивный rebasing с squashing в локальном Git репозитории, позволяющий объединить несколько коммитов в один с помощью команды git rebase.

Подготовка

Создадим новую ветку (feature-2) с несколькими коммитами, которые затем объединим с помощью интерактивного rebasing.

  1. Создаём новую ветку: git checkout -b feature-2
  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"
  3. Проверяем историю: git log

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

Интерактивный rebasing с squashing выполняется командой git rebase -i. Аргументом служит SHA-1 хеш коммита, предшествующего тем, которые нужно объединить.

  1. Находим SHA-1 хеш коммита, предшествующего коммитам в feature-2.
  2. Запускаем git rebase -i <SHA-1 хеш>, где <SHA-1 хеш> — найденный хеш.
  3. Откроется текстовый редактор со списком коммитов.
  4. Заменяем pick (или p) на squash (или s) перед каждым коммитом для объединения.
  5. Сохраняем изменения.
  6. Git создаст новый коммит, объединяющий выбранные, с сообщением, составленным из сообщений объединённых коммитов. Его можно отредактировать.
  7. После rebasing история будет содержать один объединённый коммит.

Объединение с основной веткой

После squashing, объединим feature-2 с основной веткой (master).

  1. Переключаемся на основную ветку: git checkout master
  2. Объединяем ветку feature-2: git merge -v feature-2
  3. Проверяем историю: git log История будет содержать новый объединённый коммит.

Интерактивный rebase с squashing упрощает и делает более читаемой историю коммитов, объединяя несколько в один. Хотя на GitHub это проще, данный метод полезен локально. Ключевой элемент — git rebase -i с заменой pick на squash.

Что будем искать? Например,программа