6. Работа с коммитами #
6.1. Редактирование последнего коммита #
Иногда требуется исправить последний коммит, например, чтобы изменить сообщение или добавить пропущенные файлы.
Изменение сообщения последнего коммита #
git commit --amend -m "Новое сообщение"
Добавление изменений в последний коммит #
- Внесите изменения в файлы и добавьте их в staging area:
git add изменённый_файл - Используйте команду:Это откроет текстовый редактор для изменения сообщения коммита.
git commit --amend
Внимание #
- Изменение коммита переписывает историю.
- Не используйте
--amend, если вы уже отправили коммит в удалённый репозиторий, чтобы избежать конфликтов.
6.2. Удаление и отмена коммитов #
Удаление последнего коммита (с сохранением изменений в файлах) #
Если вы хотите удалить последний коммит, оставив изменения в рабочей директории:
git reset --soft HEAD~1
Удаление последнего коммита (без сохранения изменений) #
Если изменения не нужны:
git reset --hard HEAD~1
Отмена изменений в рабочей директории #
Чтобы отменить изменения в файле:
git checkout -- имя_файла
Создание “отменяющего” коммита #
Если коммит уже отправлен в удалённый репозиторий, создайте новый коммит, который отменяет предыдущий:
git revert хэш_коммита
6.3. Работа с интерактивным git rebase
#
Интерактивный rebase позволяет редактировать, объединять или удалять коммиты в истории.
Запуск интерактивного rebase
#
Укажите количество последних коммитов для редактирования:
git rebase -i HEAD~количество_коммитовПример:
git rebase -i HEAD~3Откроется текстовый редактор с списком коммитов.
Основные действия в git rebase -i
#
pick— оставить коммит как есть.reword— изменить сообщение коммита.edit— изменить сам коммит.squash— объединить с предыдущим коммитом (сохранить сообщение обоих).fixup— объединить с предыдущим коммитом (удалить сообщение текущего).drop— удалить коммит.
Пример объединения коммитов (squash)
#
- Установите
pickдля первого коммита иsquashдля последующих. - После сохранения откроется редактор для объединённого сообщения.
Завершение rebase #
После редактирования примените изменения:
git rebase --continue
Отмена интерактивного rebase #
Если вы хотите отменить процесс:
git rebase --abort
6.4. Использование git cherry-pick для выбора отдельных коммитов
#
Команда git cherry-pick позволяет перенести один или несколько коммитов из одной ветки в другую.
Пример: перенос одного коммита #
- Получите хэш коммита, который хотите перенести:
git log - Выполните команду:
git cherry-pick хэш_коммита
Пример: перенос нескольких коммитов #
Для переноса нескольких коммитов укажите их хэши:
git cherry-pick хэш_1 хэш_2
Перенос диапазона коммитов #
Если нужно перенести последовательность коммитов:
git cherry-pick хэш_начала..хэш_конца
Разрешение конфликтов при cherry-pick
#
Если возникают конфликты:
- Разрешите их вручную.
- Добавьте исправленные файлы в staging area:
git add имя_файла - Завершите перенос:
git cherry-pick --continue
Отмена cherry-pick
#
Если вы хотите отменить перенос:
git cherry-pick --abort
Итоги #
git commit --amendпомогает исправить последний коммит.git resetиgit revertпредоставляют гибкость в удалении или отмене коммитов.- Интерактивный
git rebaseпозволяет переписывать историю для упрощения коммитов. git cherry-pick— мощный инструмент для выборочного переноса изменений между ветками.