--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가 커밋을 위해 스테이징되었음을 보여줍니다.
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: story.txt
되돌려진 커밋의 변경 사항이 이제 스테이징 영역에 있습니다. 이제 이를 수정할 수 있습니다. 원치 않는 줄을 더 나은 줄로 바꿔봅시다. nano로 story.txt를 엽니다.
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에는 수정된 내용이 있습니다. 변경 사항을 보존하고 수정하면서 커밋을 성공적으로 되돌렸습니다.