본문 바로가기

⑤ 툴 활용/git

커밋을 버리고 특정 버전으로 다시 되돌아가기(reset)

728x90

이 글은 backlog.com 의 git tutorial을 보고 정리한 것입니다.

 

 

reset 명령어를 이용해 커밋을 버리고 원하는 버전으로 돌아가기

reset 명령어 실행하면 'HEAD'의 위치와 working tree, staging 내용을 함께 되돌릴지 여부를 선택할 수 있다.

 

옵션 HEAD의 위치 staging working tree
--soft 변경함 변경 안 함 변경 안 함
--mixed(기본) 변경함 변경함 변경 안 함
--hard 변경함 변경함 변경함

- 커밋만 되돌리고 싶을 때 (--soft)

- staging에 올라간 상태를 working tree로 되돌리고 싶을 때 (--mixed)

- 최근의 커밋을 완전히 버리고 이전의 상태로 되돌리고 싶을 때(--hard)

 

직접 해보기

 

먼저 커밋 이력을 다섯 개 정도 만들어 보겠습니다.

 

 

이 상태에서, 아래 코드를 입력해보겠습니다. 이렇게 하면 --mixed를 한 것과 같습니다.

git reset HEAD~~

 

 

test.html 파일이 수정되었으나, 스테이징은 되지 않은 상태 즉, woking tree에 올라가 있는 상태로 바뀌었습니다.

git 로그는 아래와 같아 졌습니다. 

 

 

세번째 커밋으로 돌아갔습니다. 파일의 내용은 어떤지 봐볼까요?

 

 

다섯번째로 커밋했던 내용이 모두 남아 있습니다. 현재 staging 에 올라가 있지 않은 상태이므로 이 내용을 커밋하지 않고 버리거나 수정해서 커밋하거나 할 수 있습니다. 다음 테스트도 해보기 위해서 원래 상태대로 되돌려 보겠습니다.

 

reset 전의 커밋은 'ORIG_HEAD'라는 이름으로 참조할 수 있습니다. 실수로 reset 을 한 경우에는, 'ORIG_HEAD'로 reset 하여 reset 실행 전의 상태로 되돌릴 수 있습니다.

 

 

HEAD의 위치가 바뀌었죠? 로그를 확인해보면 원래 상태대로 돌아와 있습니다.

이번에는 같은 위치로 HEAD를 이동하는데 --soft 옵션을 이용해 보겠습니다.

 

 

로그를 살펴보니, 세번째 커밋으로 이동해있습니다. 상태를 보니 staging에 파일이 올라가 있는 상태입니다.

다음 옵션도 테스트해보기 위해 원래 상태로 되돌려놓겠습니다.

 

이번에는 같은 위치로 HEAD를 이동하는데 --soft 옵션을 이용해 보겠습니다.

 

git status로 확인해보니, staging과 working tree가 모두 깨끗합니다.

 

 

파일의 내용도 세번째 커밋한 내용까지만 있습니다. 직접 동일한 HEAD 위치로 이동하면서, 옵션을 달리해보니 조금 더 이해가 쉬운 것 같습니다!

728x90