나의 발자취

Git 시간여행이란? checkout, HEAD, master 정리 본문

앨리스 교육

Git 시간여행이란? checkout, HEAD, master 정리

달모드 2021. 6. 24. 16:31

일단 HEAD와 master의 의미에 대해 알아보자.

 

HEAD = "what is my repo currently pointing at". 내 레포지토리가 현재 가리키고 있는 곳! ⭐️아주 중요한 역할⭐️

master = 메인 브랜치 이름 (git에서 생성하는 디폴트 이름이 마스터이지만 변경 가능)

 

체크아웃이란?

커밋 트리 내를 이동하려면 앞에서 말했듯이 내 레포지토리가 현재 가리키고 있는 곳인 HEAD를 이동시켜야한다.

이 HEAD를 이동시키는 명령어가 checkout인데, $ git checkout <commit ID>로 특정한 커밋으로 이동이 가능하다.

즉, 시간여행이 가능하다는것! 이전 커밋한 내역들을 간단히 보려면 $ git log --oneline 으로 조회한다. (뒤에 --all 옵션을 추가할 시 HEAD 뿐만이 아니라 master의 위치 또한 보인다.)

 

 

우리가 별도로 HEAD 이동을 하지 않고 커밋을 하면

이와 같이 HEAD 가 master 을 가리키고 있는 상태이다.

체크아웃을 통해 HEAD를 work1으로 옮겨보겠다. 

그럼 아래와 같이 마스터와 헤드가 각각 다른 체크포인트를 가리키고 있는 것을 확인할 수 있다.

이 뜻은 work1를 커밋한 시점으로 돌아간다는 것이고, 내용을 추가한 뒤에 다시 add, commit을 해본다. 이 때 커밋 메시지는  "work 1 edit"이라고 하였다.

CID와 commit message가 바뀐 것을 확인할 수 있다.

 

 

 

그렇다면 마스터와 수정 전 work1은 어디에 있을까??

master는 그대로 work2에 있는 것을 알 수 있다. 즉, HEAD가 계속 움직이면서 checkout을 하고 commit을 하기에 master는 영향을 받지 않았다. work 1 또한 고유한 CID를 가지고 잘 보존되어있다. 

 

 

현재 상태는 아래와 같다.

 

이제 여기서 attatched head와 detached head에 대해서 알아볼것이다.

attached head (HEAD->master) 상태

$ git checkout master

: 커밋을 하면 head가 이동한다.

 

 

detached head (HEAD, master) 상태

$ git checkout <CID>

git checkout master 대신 마스터의 CID를 직접 입력하면 아래와 같이 HEAD와 master가 콤마로 구분되는데, 이때 HEAD와 master은 각각 같은 체크포인트를 가리키고 있고, 서로는 연결되어있지 않다.

: 커밋을 하면 master가 이동한다.

 

정리하자면,

Comments