사실 커밋을 --hard 옵션을 사용하여 리셋하더라도 내부적으로 생성한 객체를 물리적으로 삭제하지 않습니다. 삭제한 후에도 이전의 커밋으로 직접 체크아웃할 수 있습니다. 제거된 커밋 해시로 체크아웃하겠습니다.
infoh@DESKTOP MINGW64 /e/git-prune (master)
$ git checkout 72c9f62 삭제된 커밋
Note: checking out '72c9f62'.
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.
If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:
git checkout -b <new-branch-name>
HEAD is now at 72c9f62 second
infoh@DESKTOP MINGW64 /e/git-prune ((72c9f62...))
커밋을 리셋한 후에도 체크아웃됩니다. 즉, 72c9f62 커밋 객체가 물리적으로 삭제되지 않았다는 것입니다. 리셋은 단지 객체 연결 고리를 해제하여 끊긴 상태로 처리하며, 이 커밋은 깃 내부 저장소에 고립된 객체로 남아 있습니다.
지금까지 고립된 객체를 임의적으로 생성해 보았습니다. 다시 이전의 브랜치 상태로 돌아갑시다.
infoh@DESKTOP MINGW64 /e/git-prune ((72c9f62...))
$ git checkout master 브랜치 이동