Git & Github

[git] 원리 이해하기 : HEAD, MASTER ..

2022. 8. 9. 21:27

[git의 원리] HEAD와 MASTER, PARENT, COMMIT ID


 

 

git은 내용을 기반으로 commit id(식별자)가 결정된다.

 

 두번째 commit부터는 첫번째 parent값까지 포함돼서 hash값이 만들어지고 이것이 두번째 커밋의 commit id즉, master의 새로운 값이 된다.

 

각각의 버전은 그 버전이 생성되는 시점의 working diretory가 아닌 stage area의 스냅샷이다.

 

HEAD가 가리키는 버전(<-master가 가르키는 버전) <- 새로 만들어진 버전의 parent

다음 버전의 commit id가 결정.

마지막에 만들어진 버전을 HEAD가 따라간다.

MASTER(HEAD의 대리인)

HEAD가 새로운 버전으로 움직이는데 MASTER가 움직이는 것처럼 보이는 것.

 

MASTER는 '마지막 버전'

HEAD는 '현재버전'

 

시간여행,

현재 시간이 MASTER, 옛날로 돌아간다면  구석기 시대가 HEAD

 


원리를 이해해서 아래로 나아가보자!

 

협업시간

여행

브랜치

 


시간여행 GIT CHECKOUT

' 버그를 찾기 위해 과거로 돌아가보자 '

Working directory를 'D'로 바꾸려면 HEAD가 움직인다.

 

MASTER는 'E'

시간 여행을 해서 HEAD가 'D'가 된다면

현재버전은  'D'가 되고 우리의 워킹 디렉토리도 'D'가 된다.


연습

work1.txt에 내용 '3'을 추가하고 'v3'로 commit .

git log로 버전 확인해보면 v3까지 버전이 생성되었다.

 

여기서 v1 버전으로 시간여행하고 싶다

-> 즉 HEAD를 v1로 옮기고 싶다.

 

git checkout v1버전 commit id (가고자하는 버전의 commit id)

 

git log

 

HEAD의 시간여행으로 인해

git log는 head를 찾아서 head의 parent를 출력한다.

하지만, 우리에겐 마지막 작업을 기록하고 있는 MASTER가 있다.

 

git log --all

이렇게 git log --all을 붙이면 head, master의 parent id를 따라간다.

<요약>

마지막으로 작업한건 v3

현재 우리 워킹 디렉터리는 v1이거나 v1에서 커밋하지 않은 수정사항일 수 있다.

 

여기서 status를 확인해보면,

지금 working directory는 v1이다.

 


' 현재로 돌아가야 해! '

 

1. 현재로 돌아올 때,  git checkout master

다시 현재로 돌아와 HEAD가 MASTER를 가리키고 있다.

* git checkout master 잊지 않고 detached head state가 발생하는 불상사 예방하기


 

GUI/ Git Graph 에서 간단하게 시간여행 하는 방법

 

ο 과거 버전으로 이동하기

가고자 하는 버전위에서 우클릭 → CHECKOUT

 

ο 현재 버전으로 돌아오기

master 아이콘 위에서 우클릭   CHECKOUT BRANCH