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를 실행한 결과입니다.
마찬가지로 HEAD~2 대신에 커밋 아이디인 14ba2c2 를 입력해도 같은 결과가 될 것입니다.
soft 옵션을 사용했을 때는 실행 후 아무런 메시지도 없었던 것과는 다르게 실행 후 메시지가 출력됩니다.
Unstaged changes after reset:
M fileb.html
상기와 같이 fileb.html 파일이 리셋 이후 unstaged로 변경 사항이 있다고 합니다.
$ git log --oneline으로 커밋 이력을 확인한 결과가 위의 노란색 박스로 표시한 부분입니다.
$ git status로 상태를 확인해 보면 fileb.html 파일이 수정되었으나 스테이지에는 등록되어 있지 않습니다.
소스트리로 확인한 결과도 soft 옵션 결과와 차이가 있습니다.
fileb.html 파일이 워킹 디렉터리에만 존재하고 있음을 알 수 있습니다.
리셋을 통해 현재 커밋 이력은 soft 옵션을 사용했을 때와 마찬가지로 다음과 같다고 할 수 있습니다.
앞서 네 번째, 다섯 번째 커밋 이력은 없어지고,
세 번째 커밋까지만 남아 있고,
당연히 현재 HEAD는 마지막 커밋인 세번째 커밋을 가리킵니다.
그리고 여기서 주목할 점은,
세번째 커밋 지점으로 돌아간 이후,
스테이지에는 fileb.html이 올라가 있지 않다는 것입니다.
$ git diff HEAD 명령을 통해
현재 HEAD가 가리키는 세번째 커밋의 fileb.html과
워킹 디렉터리에 있는 파일의 내용과 비교해 보면 다음과 같습니다.
소스트리에서 확인해 본 결과는 다음과 같습니다.
soft 옵션과 마찬가지로 세 번째 커밋 지점으로 돌렸으나,
워킹 디렉터리에 있는 fileb.html 파일은 다섯 번째 커밋할 당시의 내용을 유지하고 있습니다.
<!-- fileb.html -->
<h1>파일B를 생성합니다.</h1>
<h2>파일B를 첫 커밋 후 첫번째 수정합니다.</h2>
<h2>파일B를 두 번째 커밋 후 첫번째 수정합니다.</h2>
이를 통해 우리가 알 수 있는 것은
--mixed 옵션을 사용할 경우 다음과 같이 동작한다는 것을 확인할 수 있습니다.
mixed 옵션은 지정한 커밋 위치로 되돌리지만,
돌아간 커밋 지점 이후로 변경된 사항이 soft 옵션과 다르게
스테이지 영역에 올라가는 것이 아닌 워킹 디렉터리에만 반영을 한다는 것입니다.
세 번째 커밋으로 두 단계 이전으로 돌아갔음에도
이후 네 번째 수정사항과 다섯 번째 수정사항이
모두 하나의 변경사항처럼 남아 있는 것은 soft 옵션과 같습니다.
mixed 옵션을 사용한 경우에는
스테이지 영역에 등록되어 있지 않으므로
다시 커밋하기 위해서는 스테이지에 등록하는 과정이 다시 필요하겠습니다.
여기까지 리셋(reset) 명령으로
커밋을 취소하는 방법 중에 --mixed 옵션에 대한 개념을 알아보았습니다.
다음엔 이어서 --hard 옵션에 대해 확인해 보겠습니다.
감사합니다.
'코딩해보니 > Git' 카테고리의 다른 글
[Git_23] 커밋 되돌리기 - 리버트(revert) (0) | 2022.12.21 |
---|---|
[Git_22] 커밋 취소하기 : reset --hard & 소스트리에서 리셋하기 (0) | 2022.12.20 |
[Git_20] 커밋 취소하기 : reset --soft (0) | 2022.12.15 |
[Git_19] 커밋 취소하기 - reset 방법 3가지 (0) | 2022.12.14 |
[Git_18] 커밋의 취소하기(reset)와 되돌리기(revert) 차이점 (0) | 2022.12.13 |
댓글