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@{#})
이 두가지는 같은 커맨드로 쓸수 있다..