Git reset
- 시계를 마치 과거로 돌리는 듯한 행위
- 프로젝트를 특정 커밋(버전) 상태로 되돌림
- 특정 커밋을 되돌아 갔을 때, 해당 커밋 이후로 쌓았던 커밋들은 전부 사라짐
- git reset [option] {commit ID}
- 옵션은 soft, mixed, hard 중 하나를 작성
- 커밋 ID는 되돌아가고 싶은 시점의 커밋 ID를 작성
- 어느시점이 어느시점에 사라졌는지 tracking하기 어려움
-> 버전관리 의미 상실
-> 사용 지양하자
git reset의 세 가지 옵션
--soft
- 해당 커밋으로 되돌아가고
- 되돌아간 커밋 이후의 파일들은 Staging Area로 돌려놓음
--mixed
- 해당 커밋으로 되돌아가고
- 되돌아간 커밋 이후의 파일들은 Working Directory로 돌려놓음
--hard
- 해당 커밋으로 되돌아가고
- 되돌아간 커밋 이후의 파일들은 모두 Working Directory에서 삭제
-> 따라서 사용 주의
- 기존의 Untracked 파일은 사라지지 않고 Untracked로 남아있음
[참고] git reflog
- git reset의 hard옵션은 Working Directory 내용까지 삭제하므로 위험할 수 있음
git reflog
명령어를 이용하면 reset하기 전의 과거 커밋 내역을 모두 조회 가능
- 이후 해당 커밋으로 reset하면 hard 옵션으로 삭제된 파일도 복구 가능
- 사실 사용은 지양함
Git revert
- 과거를 없었던 일로 만드는 행위로, 이전 커밋을 취소한다는 새로운 커밋을 생성함 (수정했다는 새로운 커밋을 생성)
git revert {commit ID}
git reset과의 차이점
- 개념적 차이
- reset은 커밋 내역을 삭제하는 반면, revert는 새로운 커밋을 생성함
- revert는 Github를 이용해 협업할 때, 커밋 내역의 차이로 인한 충돌 방지 가능
- 문법적 차이
git reset 5sd2f42
라고 작성하면 5sd2f42라는 커밋으로 되돌린다는 뜻
git revert 5sd2f42
라고 작성하면 5sd2f42라는 커밋 한 개를 취소한다는 뜻
(5sd2f42라는 커밋이 취소되었다는 내용의 새로운 커밋을 생성함)