Antilog의 개발로 쓰다
article thumbnail
반응형

이전 포스트에서 다룬 git reset에 3가지 옵션

자세한 내용은 아래 포스팅에서 확인해주세요

2019/12/06 - [Git] - [Git] reset 자세히 알아보기

 

[Git] reset 자세히 알아보기

git reset을 사용하는 경우? 다음과 같은 커밋 네역이 있다고 생각 합시다. 만약 C2의 과정에서 잘못된 내용을 커밋했다고 생각해봅시다. 이럴때 주로 git reset을 사용합니다. git reset의 사용방법 $ git res..

antilog.tistory.com

git reset --mixed 사용해보기

$ git log --oneline

위 명령어로 해당 과정을 깃에서도 확인이 가능합니다.

+) --online 옵션을 주면 log를 간단하게 한 줄로 표시하는 것이 가능합니다.

C3의 현재 커밋을 잘못 커밋한 상태이므로 C2의 커밋으로 가려고 하는 상태입니다.

해당 커밋으로 돌아가기 위해서 commit id 혹은 commit 참조 어떤 것을 사용해도 상관 없습니다.

커밋 참조는 아래에서 참고해주세요

더보기

commit id부분은 잘못된 부분의 commit id를 입력해도 좋으며 commit에 대한 참조를 사용해도 좋습니다.

만약 자식 commit에서 부모 commit으로 이동하고 싶다면?

commit id 대신 HEAD~ or HEAD~1 or HEAD^ or HEAD^1로 표현이 가능합니다.

만약 조상 commit으로 가려면 HEAD~2 or HEAD^2로

쉽게 HEAD~(돌아갈 횟수)라고 생각하시면 간단합니다.


이제 2번째 커밋으로 돌아가기 위해서

$ git reset --mixed HEAD~1
or
$ git reset --mixed c1c22391
or
$ git reset HEAD~1
or
$ git reset c1c22391

위 명령어를 사용합니다.

(명령어에 대한 설명은 2019/12/06 - [Git] - [Git] reset 자세히 알아보기 해당 포스트에서 다룹니다.)

참고로 reset의 default 값은 --mixed  옵션이므로 mixed 옵션은 따로 옵션을 주지 않아도 됩니다.

결과

위 명령어를 진행하고 나면 soft옵션과 동일하게 Working directory에는 아무런 변화가 없음을 알 수 있습니다.

실제로 파일을 살펴보아도 아무런 변화가 없음을 알 수 있습니다.

git reset --mixed 자세히 알아보기

하지만 저번과 다르게 사용하시는 에디터에 따라서 아주 조금의 변화가 있음을 느낄 수 있습니다.

만약 VScode와 같이 git을 지원하는 에디터에 경우 옆에 초록색으로 해당 부분이 추가 된 부분이라고 알려주는 기능이 있습니다.

실제로 status로 상태를 확인하고 log를 확인하면

우리가 잘 알고있는 빨간 글씨의 modified 상태가 되며 log로 보았을때 HEAD와 branch는 이동한 것을 알 수 있습니다.

이것을 자세히 그림으로 나타내면 아래와 같은 상태가 됩니다.

HEAD와 branch는 우리가 원하는 C2로 이동하였으며 soft옵션과 동일하게 Working directory는 변하지 않았고 Staging Area에 C3의 내용이 없는 것을 알 수 있습니다.

그렇기 때문에 지금 Working directory에 내용은 staged 상태가 아니기 때문에 stage에 들어오지 않은 변경점이 있고, 해당 내용을 add하고 commit하라는 내용이 있음을 볼 수 있습니다.

즉, 간단하게 현 상태를 정리하자면 C3의 내용을 작성하고 add, commit하기 이전의 상태로 돌아왔음을 알 수 있습니다.

결론

위에서 살펴본 것 처럼 mixed옵션의 경우는 HEAD와 branch이동 뿐만아니라 해당 파일을 unstaged상태로 만들 수 있었습니다.

간단하게 말해서 이전 커밋으로 돌아가고 실수로 커밋한 내용은 없어진 것이 되었다고 볼 수 있습니다.

mixed 옵션의 경우 HEAD 와 branch이동 그리고 해당 파일을 unstaged 상태로 Working directory에 보존한다는 점에서 후에 배울 hard옵션보다는 안전하다고 볼 수 있습니다.

 

(Staging Area, index, staged 등등에 대한 용어 정리)

더보기

Staging Area부분을 reset 설명에서 index, stage로 표현하지만 결과는 같은 내용이므로 초기 포스팅 부터의 이해를 돕기 위해서 해당 부분을 Staging Area로 표기하고있습니다.

실제로 용어들에 자세한 내용을 살펴보면 아래와 같음을 알 수 있습니다.

Staging Area - .git directory에 있으며 단순 파일이며 곧 커밋할 파일에 대한 정보를 담음

index - git에서 기술용어로 쓰이지만 Staging Area라는 용어를 사용해도 상관이 없다.

staged 상태 - 현재 수정한 파일을 곧 커밋할 것이라고 표시한 상태를 의미함.

출처 - https://git-scm.com/book/ko/v2/%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0-Git-%EA%B8%B0%EC%B4%88

 

반응형
profile

Antilog의 개발로 쓰다

@Parker_J_S

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

profile on loading

Loading...