(23) Git - reflog / reset 되돌리는 방법

반응형

간단하게 reset 에서 다시 되돌리는 방법을 설명하고자한다

예를들어 premium 브랜치에서 LayoutStudy README.md 여기 커밋으로 reset을 해보겠다.

etc-image-0

 

git reset --hard bc92

 

실행하면 워킹 디렉토리에 있는 내용도 다 초기화 될 것이다.

히스토리를 열어보면 맨 처음 파일 업로드 커밋을 제외한 README파일을 첫 커밋 했을때 내용만 들어가있다.

즉 리셋이 잘 실행 되었다는 것을 알 수있다.

etc-image-1

 

etc-image-2

 

그럼 이때까지 작업했던 커밋들은 다 삭제가 돼버린걸까?

그렇지는 않다. 

리셋을 해도 리셋한 커밋 이후의 커밋들이 삭제 되는 것은 아니다.

삭제 된것이 아니라는걸 보여주자면

맨 위 사진에 보면 리셋 하기전 히스토리인데 ' 1caf ' 맨 위 커밋을 다시 리셋을 해보겠다

 

git reset --hard 1caf

 

etc-image-3
etc-image-4

 

쨔잔 다시 돌아온것을 볼 수있다.

이렇게 리셋을 해도 커밋들이 삭제되는 것이 아니다.

이전에 HEAD 관련해서 배웠었지만 단지 HEAD가 가리키던 브랜치가 새로운 커밋을 가리키게 될 뿐이다. 

 

하지만 이렇게 최신 커밋을 돌아올 수 있었던 이유가 사진으로 남겨져있기 때문에 가능했지만

그렇지 않은경우에 리셋을 했다면 어떤 방법으로 다시 돌아올수있을까?

 

다시 맨 처음 커밋으로 돌아가보자

git reset --hard bc92

 

이러면 다시 돌아기기위해  최신 커밋을 알기위해 사용하는 커맨드가 존재한다.

Gir reflog

reflog는 reference log의 줄임말이며 HEAD가 이때까지 가리켜왔던 커밋들을 기록한 정보이다.

etc-image-5

 

실행해보면 이런 식으로 HEAD가 가리켜온 커밋들을 보여준다.

여기서 각 한 줄은 HEAD가 가리키던 커밋이 바뀌었을때 기록된 거라고 볼 수있다.

 

터미널에 나와있는 HEAD@{1}: reset: moving to 1caf 문구는 이 동작을 통해서 HEAD가 가리키게 된 커밋이다.

그리고 맨 앞에 나와있는 7개의 영숫자들이 커밋 아이디이다. 이것을 통해 최신 커밋으로 돌아갈 수있다.

가장 맨위에 나와있는 origin/브랜치가 최신 커밋으로 1caf를 써도 되고 HEAD@{1}을 써도 실행된다.

 

etc-image-6
etc-image-7

 

 

정리

 

etc-image-8etc-image-9

 

git reset을 사용한다고 reset한 커밋이 후의 커밋들이 삭제되는 것은 아니다.

그래서 언제든지 더 나중의 커밋으로 돌아갈 수있고 이 떄 커밋 아이디를 확인하기위해 reflog 커맨드를 사용한다.

그럼 헤드가 가리켰던 커밋들을 볼 수있고 그중 원하는 커밋으로 다시 reset 하면 된다.

 

 

반응형