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 --soft 사용해보기

reset을 전체적으로 설명한 포스트에서 보았듯 현재 commit log는 아래와 같습니다.

$ 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 --soft c1c2391
or
$ git reset --soft HEAD~1

위 명령어를 사용합니다.

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

결과

위 명령어를 진행하고 나면 우리의 Working directory에는 아무련 변화가 없음을 알 수 있습니다. 

실제로 파일을 살펴보면 변한 것이 아무것도 없음을 알 수 있습니다.

git reset --soft 자세하게 알아보기

정말 아무런 변화가 없는지 직접 확인해봅시다.

log를 확인하고 status로 현재 상태를 확인해보면,

HEAD와 master는 C2를 가리키는 것으로 보아 HEAD와 branch는 옮겨진 것을 확인 할 수 있고,

status로 확인해보면 뭔가 어디선가 본듯한 modified 상태임을 알 수 있습니다.

이것을 자세하게 그림으로 나타내면 현재 상태는 아래 그림과 같다고 할 수 있습니다.

HEAD와 branch는 우리가 원하는 C2 커밋으로 이동하였으나 Working Directory와 Staging Area에서는 아직 C3의 내용이 있습니다.

따라서 status를 사용하였을때 익숙한 아래 사진의 빨간색의 modified가 아닌 위에 초록색의 modified 상태로 이미 Staging Area에 해당 내용이 들어가 있음을 알려줍니다.

옆에 modified 상태와 비교하면 빨간 글씨의 modified에서는 스테이지에 들어오지 않은 변경점이 있으며,

해당 내용을 add하고 commit하라는 내용이 있는가 하면

 

초록 글씨의 modified에서는 이미 커밋 되어있고,

아래에 git reset HEAD <file> 로 unstage상태 즉 Staging Area에서 뺄 수 있다고 되어있습니다.

 

git reset HEAD 이부분은 mixed 옵션이므로 다음 포스트에서 더 자세하게 다뤄보도록 하겠습니다.

결론

reset에서 soft옵션은 위에서 살펴본 것 처럼 HEAD와 branch만 이동하는 것을 알 수 있었습니다.

soft 옵션의 경우 HEAD와 branch만 이동하므로 Working directory, Staging Area(index, stage상태) 즉, add한 상태로 보존하여 reset 옵션중에서는 가장 안전한 옵션이라고 할 수 있습니다.

(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...