과거 커밋들은 남아있고, 파일 내용은 특정 커밋으로 돌아가는 이미지
$ git log --oneline
f522740 (HEAD -> featurebranch) commit message 3
703203b commit message 2
d836b40 commit message 1
마지막 커밋을 취소하고 싶을 경우, git reset --hard [COMMIT_ID]
로 HEAD가 이전 커밋(703203b)을 가리키도록 합니다.
$ git reset --hard 703203b
마지막 커밋이 취소되고 HEAD가 이전 커밋을 가리키게 됩니다.
$ git log --oneline
703203b (HEAD -> featurebranch) commit message 2
d836b40 commit message 1
$ git log --oneline
f522740 (HEAD -> featurebranch) commit message 3
703203b commit message 2
d836b40 commit message 1
f522740 커밋을 되돌리는 경우 f522740을 revert를 실행 합니다.
$ git revert f522740
커밋 메시지 작성을 위해 EDITOR 환경변수의 에디터가 실행되고, 저장 후 에디터를 종료하면 새로운 revert 커밋이 추가됩니다.
$ git log --oneline
43c6b95 (HEAD -> featurebranch) Revert "Revert commit message"
f522740 commit message 3
703203b commit message 2
d836b40 commit message 1
➕ reset과 revert의 차이
공통점은 과거의 커밋으로 되돌린다는 점이지만, 큰 차이점은 과거로 되돌리겠다는 내용도 기록이 되는가? 입니다.
reset은 현재가 없던 것처럼 원하는 과거로 돌아가고, 커밋 이력을 남기지 않는 반면 revert는 과거로 돌아간다는 이력을 남기고 원하는 시점의 커밋으로 돌아갑니다. 이전의 커밋 내역은 그대로 남겨두고 새로운 커밋을 생성하면서 과거로 돌아갑니다.