(15) Git - HEAD 의 의미 / git reset

반응형

git log --pretty=oneline 에서 보면 상단에 HEAD라고 표시 되어있는 것을 볼 수가 있는데

 

여기서 HEAD 는어떤 커밋 하나를 가리키고 있는 존재인데, 보통 가장 최근에 한 커밋을 가리키고 있다.

 

우리가 커밋을 할 때마다 새로운 커밋이 생기고 HEAD는 매번 더 새로운 커밋을 가리키게 된다.

"아하 HEAD는 최근 커밋을 가리키는구나? 근데 그게 뭐?" 라고 할 수있다

이런 HEAD가 왜 필요할까?

 

지금 작업중인 워킹 디렉토리의 내부는 HEAD가 가리키는 커밋에 따라 다르게 구성된다. 

워킹 디렉토리 내부를 살펴보자면 

 

최근까지 작업한 내용이 잘 들어있다.

 

 

그 뜻은 HEAD가 가장 최근에 한 커밋을 가리키고 있다는 것인데, 만약 HEAD가 다른 커밋을 가리키면

워킹 디렉토리 안에 있는 것들은 언제든지 다르게 바뀔 수 있다.

 

만약 HEAD가 최신 커밋보다 더 이전의 커밋을 가리키게 된다면 

워킹 디렉토리의 내부도 그 과거 커밋의 모습대로 바뀌게 된다.

 HEAD가 어떤 커밋을 가리키고 있는 존재고 HEAD가 가리키는 커미의 내용대로

워킹 디렉토리가 구성된다.

 

한번 이 HEAD가 더 이전에 했던 커밋을 가리키도록 해보자

 

Git reset

reset은 초기화하다, 다시 설정하다 라는 뜻이며

이 다음에 한칸 띄우고 --hard 옵션을 사용하며 herd 옵션은 reset과 함께 쓰는 옵션중 하나이다.

그 다음 다시 한칸 띄우고 커밋 아이디 4자리를 써준다. 

한번 기존 HARD 바로 밑에있는 커밋으로 지정해보자 (48d8)

 

HEAD가 옮겨진 것을 확인 할 수있다. 

워킹 디렉토리의 내용도 바뀌었는지 확인해보면 

 

 

"좀 더 노력하자" 문구가 사라진 것을 볼 수있다.

HEAD가 옮겨짐에 따라 최신커밋의 기준에 따라 이 전 커밋으로 돌아가게된 것이다.

 

정리

이렇게 "git reset" 을 사용하면 헤드가 과거의 커밋을 가리키게 할 수있고 

워킹 디렉토리의 내용도 과거의 커밋의 상태로 돌아가게 할 수있다.

 

 

"git resset"은 과거 커밋으로 아예 돌아가고 싶을 때 사용한다.

예를 들어서 특정 시점 이후로 어떤 커밋을 한 이후로 작업 내용이 마음에 안들때

마지막으로 마음에 들었던 커밋으로 돌아갈 수있게 해준다.

그리고 그 커밋부터 새로 작업을 다시 시작하면 된다.

 

반응형