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

[Git_21] 커밋 취소하기 : reset --mixed

by 위시랜 2022. 12. 19.

커밋 취소하기 : reset --mixed
커밋 취소하기 : reset --mixed

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

reset 명령어는 옵션을 함께 사용해야 하며, 사용할 수 있는 옵션은 3가지가 있습니다.

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

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

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

 

각 옵션의 차이점과 동작에 대해 실습을 통해 확인해 보고 있습니다.

지난번 --soft 옵션에 이어서 --mixed 옵션에 대해 확인해 보겠습니다.


mixed 옵션은 기본값으로 reset 명령어 실행 시 옵션을 생략하면 --mixed 옵션이 적용되어 실행됩니다.

$ git reset --mixed <커밋 지점> 혹은 $ git reset <커밋 지점> 이 같은 결과가 되겠습니다.

 

soft 옵션과 마찬가지로 실행 후 결과를 확인해 보도록 하겠습니다.

 

$ git reset --mixed HEAD~2를 실행한 결과입니다.

git reset --mixed 실행 화면
git reset --mixed 실행 화면

마찬가지로 HEAD~2 대신에 커밋 아이디인 14ba2c2 를 입력해도 같은 결과가 될 것입니다.

soft 옵션을 사용했을 때는 실행 후 아무런 메시지도 없었던 것과는 다르게 실행 후 메시지가 출력됩니다.

Unstaged changes after reset:

M fileb.html

상기와 같이 fileb.html 파일이 리셋 이후 unstaged로 변경 사항이 있다고 합니다.

 

$ git log --oneline으로 커밋 이력을 확인한 결과가 위의 노란색 박스로 표시한 부분입니다.

$ git status 상태를 확인해 보면 fileb.html 파일이 수정되었으나 스테이지에는 등록되어 있지 않습니다.

 

소스트리로 확인한 결과도 soft 옵션 결과와 차이가 있습니다.

fileb.html 파일이 워킹 디렉터리에만 존재하고 있음을 알 수 있습니다.

소스트리(Sourcetree)에서 확인한 커밋 이력 및 파일 상태
소스트리(Sourcetree)에서 확인한 커밋 이력 및 파일 상태

리셋을 통해 현재 커밋 이력은 soft 옵션을 사용했을 때와 마찬가지로 다음과 같다고 할 수 있습니다.

리셋 후 커밋 이력 도식화
리셋 후 커밋 이력 도식화

앞서 네 번째, 다섯 번째 커밋 이력은 없어지고,

세 번째 커밋까지만 남아 있고,

당연히 현재 HEAD는 마지막 커밋인 세번째 커밋을 가리킵니다.

 

그리고 여기서 주목할 점은,

세번째 커밋 지점으로 돌아간 이후,

스테이지에는 fileb.html이 올라가 있지 않다는 것입니다.

git status로 확인한 Git 상태
git status로 확인한 Git 상태

$ git diff HEAD 명령을 통해

현재 HEAD가 가리키는 세번째 커밋의 fileb.html과

워킹 디렉터리에 있는 파일의 내용과 비교해 보면 다음과 같습니다.

git diff HEAD로 비교 확인
git diff HEAD로 비교 확인

소스트리에서 확인해 본 결과는 다음과 같습니다.

소스트리(Sourcetree)에서 확인한 파일 비교
소스트리(Sourcetree)에서 확인한 파일 비교

soft 옵션과 마찬가지로 세 번째 커밋 지점으로 돌렸으나,

워킹 디렉터리에 있는 fileb.html 파일은 다섯 번째 커밋할 당시의 내용을 유지하고 있습니다.

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

이를 통해 우리가 알 수 있는 것은

--mixed 옵션을 사용할 경우 다음과 같이 동작한다는 것을 확인할 수 있습니다.

reset --mexed 명령의 실행 개념도
reset --mexed 명령의 실행 개념도

mixed 옵션은 지정한 커밋 위치로 되돌리지만,

돌아간 커밋 지점 이후로 변경된 사항이 soft 옵션과 다르게

스테이지 영역에 올라가는 것이 아닌 워킹 디렉터리에만 반영을 한다는 것입니다.


세 번째 커밋으로 두 단계 이전으로 돌아갔음에도

이후 네 번째 수정사항과 다섯 번째 수정사항이

모두 하나의 변경사항처럼 남아 있는 것은 soft 옵션과 같습니다.


mixed 옵션을 사용한 경우에는

스테이지 영역에 등록되어 있지 않으므로

다시 커밋하기 위해서는 스테이지에 등록하는 과정이 다시 필요하겠습니다.

 

여기까지 리셋(reset) 명령으로

커밋을 취소하는 방법 중에 --mixed 옵션에 대한 개념을 알아보았습니다.

 

다음엔 이어서 --hard 옵션에 대해 확인해 보겠습니다.

 

감사합니다.

 

댓글