EDU/codeIt

git reset 과 reflog

이앤지 2021. 10. 11. 10:43

 

$git reset은 헤드가 가리키고 있는 커밋을 바꾸는 커맨드인데

위 처럼 $git reset --hard 커밋아이디 를 입력해서 초기 커밋으로 돌아가면

히스토리를 보면 헤드가 가리키는 커밋이 바뀌고 이전의 커밋은 표시 되지 않는 것을 볼 수 있다.

그렇다면 표시되지 않는 커밋들은 삭제가 된것일까?

즉, 아래같은 그림으로 요약할 수 있다. 이 커밋들은 어떻게 된 것일까?

 

정답은 reset을 해도 그 이후의 커밋들이 삭제된 것은 아니라는 것!

그냥 돌아가고 싶은 커밋 아이디를 적으면 다시 잘 보이게 된다.

 

 

그런데 이미 reset 후라 커밋아이디를 모르겠으면?

$git reflog 를 커맨드를 쓰면 된다.

reflog는 reference log의 줄임말로 헤드가 이때까지 가리켜왔던 커밋들을 기록한 정보 이고

아래와 같은 모습인데

여기서 한줄은 각 헤드가 가리키던 커밋들이 바뀌었들때 기록된 것이니 이를 확인하면 된다.

1fbe~ (origin/premium) HEAD@{1}: reset: moving to 1fbe  

저기서 HEAD@{1} 은 reset:moving to 1fbe를 통해서 헤드가 가리키게 된 커밋을 말하고 

그 커밋의 아이디는 바로 1fbe 이다 .라고 해석하면 된다. 이것을 통해서 다시 이전의 커밋으로 돌아갈 수 있다.

히스토리를 보면 확실하게 이전의 커밋들이 삭제 되지 않았었다는 것을 알 수 있다.

 

참고로

$git reset 커밋아이디(=HEAD@{#})

이 두가지는 같은 커맨드로 쓸수 있다..