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
— мощный инструмент для выборочного переноса изменений между ветками.