working directory | staging area | repository directory |
기타 | |
파일에 대한 작업 | ||||
checkout -- 파일 | 취소 | 유지 | 유지 | |
checkout HEAD 파일 | 취소 | 취소 | 유지 | |
reset -- 파일 | 유지 | 취소 | 유지 | |
전체에 대한 작업 | ||||
reset commit id | 유지 | 취소 | commit id 이후의 커밋 취소 |
commit id에 해당하는 커밋은 유지된다. |
reset HEAD^ | 유지 | 취소 | 최신 커밋-1로 리셋 |
커밋은 했지만 push하지 않은 경우 유용 HEAD^는 최신커밋을 포함 두개의 커밋을 의미 |
reset HEAD~2 | 유지 | 취소 | 최근 커밋 -3번째 커밋으로 리셋 |
|
reset --hard HEAD~2 | 취소 | 취소 | 최근 커밋 -3개 커밋으로 리셋 |
-- hard는 working과 staging 모두 취소 |
reset --soft HEAD~2 | 유지 | 유지 | 최근 커밋 2개 취소 | --soft는 working과 staging 모두 유지 |
reset --hard ORIG_HEAD | 병합한 커밋을 취소 | ORIG_HEAD는 위험한 작업에 대한 포인터로 push나 merge가 여기에 해당됨 |
||
revert HEAD | 거부 | 거부 | 최신 커밋 취소 | 커밋을 이미 push한 경우 |
reset --hard HEAD | 취소 | 취소 | 유지 | 신규파일에 영향없음 |
checkout HEAD | 취소 | 취소 | 유지 | 신규파일에 영향없음 |
checkout -f | 취소 | 취소 | 유지 | 신규파일에 영향없음 |
clean -f -d | untracked 파일제거 (디렉토리포함) |
유지 | 유지 |
reset의 옵션
- --soft : staging area(index) 보존, working directory 보존. 즉 모두 보존.
- --mixed : staging area 취소, working directory 보존 (기본 옵션)
- --hard : staging area 취소, working directory 취소. 즉 모두 취소.
reset과 revert의 차이점
reset은 해당 커밋의 상태로 되돌리는 명령이다. 그렇기 때문에 reset 뒤에 커밋 아이디를 지정하면 해당 커밋이 취소되는 것이 아니라, 해당 커밋 이후의 변경점이 취소되는 것이다. revert는 선택한 커밋이 취소되는 것이 아니라, 해당 커밋을 취소하는 커밋이 추가되는 것이다.
다른 브랜치를 잘못 merge 했을 때의 조치
만약 master 브랜치에 wrong라는 이름의 브랜치를 실수로 merge 했다면 아래와 같은 명령으로 master 브랜치를 원격 저장소 (origin master)와 동일한 상태로 전환 할 수 있다.
git reset —hard origin/master