안녕하세요. 이번 시간에는 간단하게 checkout이랑 reset에 대해서 실습할 거에요. reset은 꽤 옵션이 많긴 하지만, 자세하게 다루지는 않겠습니다.

 


 먼저 GG.. 라는 커밋이 하나 추가되었어요. 다음에 checkout HEAD~1을 해 보겠습니다.

 

 그러면, 이전에 HEAD가 가리키고 있었던 것은 GG.. 였는데요. HEAD~1로 checkout을 했기 때문에 HEAD만 GG.. 커밋의 이전으로 이동하게 됩니다.

 

 따라서, stage3 first 커밋을 HEAD가 가리키고 있는 상황이 되어 버린 셈입니다.

 

 

 HEAD가 가리키고 있는 hash는 0b07df4... 였습니다. 그런데, refs/heads/stage3은 251f69a... 를 가리키고 있어요. 이 detach 상태를 해결하는 방법은 stage3과 같은 branch로 checkout을 하는 것입니다.

 

 git checkout stage3은 stage3 브랜치를 HEAD가 가리키게 합니다. attached 상태가 됩니다.

 


 다시, GG.. 커밋으로 돌아왔는데요. 이번에는 git reset HEAD^ 명령어를 입력해 보겠습니다.

 

 그랬더니, Unstaged changes after reset이라는 메세지가 뜹니다. 뭔가 변경사항이 있나 봅니다. 사실 GG.. 커밋은 1.txt에 wrong answer와 hacked를 추가한 것이였습니다.

 

 이 변경 내역이 들어왔음을 알 수 있는데요. git을 보겠습니다.

 

 

 아까의 GG.. 가 어디가고, HEAD랑 stage3이 stage3 first를 가리키고 있습니다.

 

 

 HEAD와 refs/heads/stage3을 보겠습니다. 그러면, 둘 다 0b07d.. 를 가리키고 있음을 알 수 있는데요. GG.. 커밋이 251f.. 였다는 것을 생각해 봅니다. 그러면, HEAD가 attach 상태일 때, HEAD 뿐만이 아니라, branch의 HEAD도 이전 버전으로 돌아갔다는 의미가 됩니다. HEAD가 branch를 가리키고 있을 때, checkout은 branch의 HEAD를 바꾸지 않는 것과는 대조적입니다.