При работе с системой контроля версий Git часто возникает необходимость объединить несколько последовательных коммитов в один, чтобы упростить историю изменений или сделать её более понятной. Также бывает нужно удалить некоторые файлы из репозитория. В этой статье мы рассмотрим, как выполнить обе эти задачи.
Шаг 1: Получение последней версии ветки main
Первым делом нам нужно убедиться, что наша локальная копия репозитория содержит актуальные данные. Для этого выполним следующие команды:
git fetch origin
git checkout main
git pull origin main
Эти команды обновят нашу локальную копию репозитория и перейдут на ветку main
.
Шаг 2: Просмотр истории коммитов
Чтобы посмотреть последние пять коммитов, введём команду:
git log --oneline -n 5
Она выведет список последних пяти коммитов в виде одной строки для каждого.
Шаг 3: Объединение пяти последних изменений в один коммит
Для объединения пяти последних коммитов в один воспользуемся интерактивным ребейзингом:
git rebase -i HEAD~5
Откроется редактор, содержащий информацию о последних пяти коммитах. Первые строки будут выглядеть примерно так:
pick <commit_hash_1> Commit message 1
pick <commit_hash_2> Commit message 2
pick <commit_hash_3> Commit message 3
pick <commit_hash_4> Commit message 4
pick <commit_hash_5> Commit message 5
Заменим слово pick
на squash
для всех строк, кроме первой:
pick <commit_hash_1> Commit message 1
squash <commit_hash_2> Commit message 2
squash <commit_hash_3> Commit message 3
squash <commit_hash_4> Commit message 4
squash <commit_hash_5> Commit message 5
Сохраним и закроем файл. Откроется другой редактор, где сможем задать новое сообщение для объединённого коммита. Напишем подходящее сообщение и сохраним изменения.
Шаг 4: Отправка изменений на удалённый сервер
Теперь отправим изменения на удалённый сервер:
git push origin main --force-with-lease
Флаг --force-with-lease
необходим, поскольку мы изменили историю коммитов.
Шаг 5: Удаление ненужных файлов
После успешной проверки удалим файлы:
git rm en_name_sausage_creamy.xml en_name_sausage_milk.xml en_name_sausage_munich.xml en_name_sausage_nuremberg.xml en_name_sausage_special.xml
Создадим новый коммит с этими изменениями:
git commit -m "Remove unnecessary XML files"
И отправим изменения на удалённый сервер:
git push origin main
Заключение
Мы рассмотрели, как объединить несколько коммитов в один и удалить ненужные файлы из репозитория. Эти навыки полезны для поддержания чистоты и удобства чтения истории изменений в системе контроля версий Git.