- Reset
- 돌아가려는 커밋으로 리파지토리는 재설정되고, 해당 커밋 이후의 이력은 사라짐
$ git reset <option> <commit-id>

- hard
- 되돌린 이력 이후의 내용은 지워짐
- INDEX 취소, ADD 하기 전 상태 (UNSTAGED 상태)
- 작업영역의 파일 삭제 (모두 취소)
$ git reset --hard <commit-in>
# 커밋을 취소하고 Unstaged 상태로 되돌리기
$ git rest --hard HEAD^
- soft
- 되돌린 이력 이후의 내용은 보존
- 해당 내용의 INDEX (스테이지)도 그대로 존재
- 바로 다시 커밋할 수 있는 상태로 남아 있음
- INDEX 보존, ADD한 상태 (STAGED 상태)
- 작업 영역의 파일 보존
$ git reset --soft <commit-id>
- 커밋이 된 경우 커밋 이전으로 되돌리기
- 커밋하기 이전의 Staged(Added) 상태로 돌아 감
$ git reset -soft HEAD^
- add하기 이전의 상태로 되돌리기 (Staged -> Unstaged)
$ git reset filename
$ git reset HEAD filename
- mixed
- 옵션을 적지 않으면 mixed 옵션 적용 (default)
- 이력은 되돌리며 이후에 변경된 내용에 대해서는 남아있지만 인덱스는 초기화 됨
- 커밋을 하려면 다시 변경 된 내용은 추가해야 하는 상태
- INDEX 취소, ADD하기 전 상태 (UNSTAGED 상태)
- 작업영역의 파일 보존 (기본 옵션)
$ git reset --mixed <commit-id>
$ git reset --mixed HEAD^
$ git reset HEAD^
- Unstaged 상태로 변경 (마지막 두 개의 커밋 취소)
$ git reset HEAD~2
$ git reset HEAD