본문 바로가기
코딩해보니/Git

[Git_19] 커밋 취소하기 - reset 방법 3가지

by 위시랜 2022. 12. 14.

커밋 취소하기 : reset 방법 3가지
커밋 취소하기 : reset 방법 3가지

지난 시간에 커밋한 이력에 대해

취소(reset)와 되돌리기(revert)에 대한 차이점을 알아봤습니다.

 

이어서 커밋 취소하기(reset)에 대해 자세히 알아보겠습니다.


reset (리셋) - 커밋 취소하기

reset(리셋)으로 커밋을 취소하는 것을 실습을 통해 확인해 보겠습니다.

실습을 위해 커밋을 다섯번 진행하도록 하겠습니다.

저는 앞서 filea.html과 fileb.html 상태에 이어서 세 번째 커밋을 하고,

이후 fileb.html을 수정 후 네번째 커밋을 하고,

다시 fileb.html을 수정 후 다섯 번째 커밋을 진행합니다.

그 결과를 소스트리에서 확인한 결과가 다음과 같습니다.

소스트리(Sourcetree)에서 커밋 이력 확인하기
소스트리(Sourcetree)에서 커밋 이력 확인하기


다섯 번째 커밋 버전의 filea.html와 fileb.html 내용은 다음과 같습니다.

* 파일 filea.html 내용

<!-- filea.html -->
<h1>파일A를 만듭니다.</h1>
<h2>파일A를 수정합니다.</h2>
<h2>파일A를 두번째로 수정합니다.</h2>
<h2>파일A를 첫 커밋 이후 처음으로 수정합니다.</h2>
<h2>파일A를 두번째 커밋 이후 추가 수정합니다.</h2>

* 파일 fileb.html 내용

<!-- fileb.html -->
<h1>파일B를 생성합니다.</h1>
<h2>파일B를 첫 커밋 후 첫번째 수정합니다.</h2>
<h2>파일B를 두 번째 커밋 후 첫번째 수정합니다.</h2>

터미널에서 커밋 히스토리를 확인한 결과는 다음과 같습니다.

Git Bash(터미널)에서 확인한 커밋 이력
Git Bash(터미널)에서 확인한 커밋 이력

이렇게 커밋 히스토리를 확인하는 이유는

되돌리려고 하는 커밋 지점을 확인하려는 것입니다.

 

커밋 지점을 Git에게 알려주면

Git은 해당 지점으로 되돌리는 작업을 실행하게 됩니다.

 

이렇게 알려주는 복귀 지점은 커밋 아이디(ID)가 됩니다.

커밋 아이디는 앞서도 얘기했지만 40자리 해시 값입니다.

40자리가 많이 길기 때문에

앞 7자리 정도만 해도 거의 중복이 되지 않기 때문에 충분합니다.

 

git log 명령어로 확인하면 내용이 많아 확인이 불편할 수 있습니다.

이럴 경우 --oneline 옵션을 함께 사용하면 편리합니다.

커밋 이력 요약 보기
커밋 이력 요약 보기

$ git log --oneline을 실행한 결과가 위와 같으며,

간략한 커밋 해시 값(7자리)과 커밋 메시지를 확인할 수 있습니다.

# 커밋 이력 한 줄로 간략히 확인하기
$ git log --oneline

소스트리 화면에서도 아래와 같이

간략한 커밋 해시 값(7자리)과 커밋 메시지 확인을 할 수 있습니다.

소스트리(Sourcetree)에서 커밋 이력 및 커밋 아이디 확인하기
소스트리(Sourcetree)에서 커밋 이력 및 커밋 아이디 확인하기

실습을 위해서는 커밋 해시 값이 중요하다 보니, 설명이 길어졌습니다.

이 커밋 해시 값은 각자 실습 환경마다 다르므로,

저의 해시 값을 기억할 필요는 없으며, 각자의 해시 값을 잘 확인하면 되겠습니다.

물론 커밋 해시 값(커밋 아이디)을 사용하지 않고 HEAD 포인터를 이용해 실행할 수도 있습니다.

 

HEAD를 기준으로 지점을 지정하는 방법은,

물결(혹은 틸트)(~)기호 또는 캐럿(^) 기호를 사용해 HEAD를 기준으로 지정 가능합니다.

다음과 같이 HEAD와 기호를 이용해 지정할 수 있습니다.

  • HEAD~<숫자> : 현재에서 <숫자>만큼 이전에 해당하는 커밋 지점.
  • HEAD~1 : 현재에서 한 단계 전
  • HEAD^ : 한 커밋 위(부모 커밋)에 해당하는 지점
  • HEAD^^ : 부모의 부모 커밋
  • HEAD^<숫자> : <숫자>만큼의 부모에 해당하는 커밋 지점.

앞서 다섯번의 커밋을 커밋 아이디(해시값)와 HEAD를 기준으로 표시해 보면 다음과 같습니다.

다섯번의 커밋 이력 및 커밋 지점에 대한 HEAD 표기 예시
다섯번의 커밋 이력 및 커밋 지점에 대한 HEAD 표기 예시

그럼, 터미널에서 reset 명령어로 되돌려 보도록 하겠습니다.

reset 명령어 사용방법은 다음과 같습니다.

# reset 명령어로 커밋 되돌리기
$ git reset <옵션> <커밋 지점>

reset 명령어는 옵션을 함께 사용해야 하며,

사용할 수 있는 옵션은 3가지가 있습니다.

  • --soft : 스테이지 영역을 포함한 상태로 복원합니다.
  • --mixed : 기본 옵션 값은 mixed입니다. reset 명령어를 사용할 때 옵션을 지정하지 않으면 기본값인 mixed로 지정됩니다.
  • --hard : 실제 파일이 삭제된 이전 상태로 복원합니다.

soft 옵션과 mixed 옵션 차이는 크게 스테이지 영역과 관련이 있습니다.

hard 옵션은 워킹 디렉토리와 관련이 있습니다.

 

각 옵션의 차이점과 동작에 대해

다음 포스팅에서 이어서 실습을 통해 확인해 보겠습니다.

 

댓글