git reset👆
HEAD
를 어디에 위치 시키냐의 관점으로 볼 수 있다
가장 최근의 커밋을 현재 브랜치에서 지워준다. 하지만 작업한 내용은 여전히 working tree에 남아있다. 즉 git add
는 되어 있고, 커밋이 되어있지 않은 상황이라고 보면 된다!
예를 들어 위와 같이 커밋을 한후에 git reset --soft HEAD~1
(HEAD를 한단게 전으로 이동) 명령어를 입력하면 changes to be committed
로 되어서 수정된 부분이 add만 된상태인 상태로 보여진다. HEAD
는 이전 커밋을 바라보고 index
는 여전히 working directory의 변화를 포함하고 staged된 상태라고 볼 수 있다.
git reset
만 사용하였을때의 기본 default 옵션이며, 보통 특정 커밋 해시값을 뒤에 추가하여 그 commit으로 reset할 때 주로 사용한다.HEAD/INDEX
둘 다 이전 상태를 바라보고 working directory 의 내용은 unstaged된다.--hard
라는 이름처럼 아예 HEAD와 index를 옮기고 working directory 내용까지 reset즉 아예 없애버리게 된다.
git log
를 통해 돌아가고자 하는 commit
을 확인하고 (commit 뒤의 노란 해시값)git reset 87eed64c19dc96650da3a773d7c9f85fafb4a4e3
을 입력하면 해당 commit으로 head가 향하게 되고 그 이후의 작업물은 unstaged된 상태로 저장되어 있다. 이때 checkout 을 해주면 unstaged된 작업도 checkout 된다!