Отмена изменений с сохранением с помощью --no-commit
Иногда вы хотите отменить изменения из коммита, но сохранить их в вашей рабочей директории для дальнейшего изменения. Например, вы можете захотеть исправить ошибку в коммите, а не полностью отбрасывать его. Опция --no-commit (или -n) идеально подходит для этого.
Сначала давайте сбросим наш репозиторий к состоянию перед последней отменой, чтобы попробовать другой подход. Для этого мы используем git reset. Эта команда перемещает указатель HEAD, а --hard обновляет файлы в вашей рабочей директории в соответствии с этим.
git reset --hard HEAD~1
Эта команда удаляет коммит "Revert", который мы только что сделали. Вы можете подтвердить это, выполнив git log --oneline.
Теперь давайте снова отменим "нежелательный" коммит, но на этот раз используя опцию --no-commit. Не забудьте использовать хэш коммита "Add a second, unwanted line".
Пожалуйста, замените <your-commit-hash> на фактический хэш из вашего терминала.
git revert --no-commit <your-commit-hash>
На этот раз редактор не открывается. Отмена подготовлена, но не закоммичена. Проверьте статус вашего репозитория:
git status
Вывод покажет, что story.txt подготовлен к коммиту (staged for commit):
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: story.txt
Изменения из отмененного коммита теперь находятся в вашей области подготовки (staging area). Теперь вы можете их изменить. Давайте заменим нежелательную строку на лучшую. Откройте story.txt с помощью nano:
nano story.txt
Файл будет выглядеть так же, как после отмены в Шаге 2. Добавьте новую, лучшую строку в конец файла:
And they lived happily ever after.
Сохраните и выйдите из nano (Ctrl+O, Enter, Ctrl+X).
Теперь добавьте ваши изменения в область подготовки и закоммитьте их с новым, описательным сообщением:
git add story.txt
git commit -m "Replace unwanted line with a proper conclusion"
Наконец, проверьте лог и содержимое файла, чтобы увидеть результат:
git log --oneline
cat story.txt
Лог показывает ваш новый коммит, а story.txt содержит исправленное содержимое. Вы успешно отменили коммит, сохранив и изменив его изменения.