git log --oneline
12741e5 (HEAD -> main) Add ThisIsaFile
d678197 Add .gitignore
97f1e31 Readme.md
HEAD가 있는 곳이 현재 브랜치(마스터)를 가리키는 포인터입니다.
그리고 이 브랜치는 가장 최근의 commit을 가리킵니다.
여기에서 돌아가고 싶은 commit을 찾아서 git reset를 실행합니다.
reset hard를 쓰면 돌아가려는 이력 이후의 모든 내용은 지워버리겠다는 것입니다.
과거 이력만 지우고 이후에 무대에 올려놓은 것으로 바로 commit 하고 싶다면, reset soft를 쓰면 됩니다.
$ git reset --hard d678197
다시 git log와 git status 명령어로 현재 저장소 상태를 확인해봅니다.
$ git log --oneline
d678197 (HEAD -> main) Add .gitignore
97f1e31 Readme.md
$ git status
On branch main
nothing to commit, working tree clean
이제 HEAD는 2번째 커밋인 d678197을 가리키고 있으며, 저장소에 변경사항도 없는 상태입니다.
--hard 옵션은 현재 HEAD에서 추가된 변경사항들을 모두 되돌려줍니다.
--hard 옵션을 사용할 때 착각할 수 있지만 아예 Git 저장소에서 관리 하지 않는 파일들(Untracked files)을 추가한 경우 이 파일들은 reset 이후에도 그대로 유지됩니다.
이 파일들까지 삭제하고자 하는 경우 git clean 명령어를 따로 실행해야합니다.