[GIT] HEAD 포인터

2022. 8. 3. 00:22GIT

깃은 객체의 포인터 개념을 사용한다.

HEAD가 객체 포인터다.

 

마지막 커밋

깃은 마지막 커밋 정보가 중요하다.

깃은 마지막 커밋 정보를 기반으로 새로운 커밋을 생성한다.

빠르게 마지막 커밋을 찾기 위해 HEAD라는 포인터를 사용한다.

HEAD는 현재 작업 중인 브랜치의 마지막 커밋 ID를 가리키는 참조 포인터이다.

 

브랜치 HEAD

브랜치를 이동하면 HEAD 포인트도 이동된다.

브랜치가 여러 개이면 HEAD 포인트도 여러 개이다.

각각의 브랜치마다 마지막 커밋이 다르기 때문이다.

브랜치마다 마지막 커밋ID를 가리키는 HEAD 포인터가 하나씩 있다.

 

소스트리 HEAD

소스트리에서 HEAD 표시

소스트리에서 해당 커밋 옆에 브랜치 아이콘이 있는 것을 볼 수 있는데 이것이 HEAD 포인터가 가리키는 커밋을 의미한다.

 

상대적 위치

깃의 HEAD 포인터는 내부적으로 커밋을 생성하고 브랜치를 관리하는 데 매우 유용하다.

깃의 명령어를 입력할 때도 기준점으로 사용한다.

마지막 커밋 위치인 HEAD를 기준으로 상대적 커밋 위치도 지정할 수 있다.

상대적 커밋 위치를 지정할 때는 캐럿(^)과 물결무늬(~) 기호를 같이 사용한다.

HEAD의 바로 이전 커밋을 가리킨다면 HEAD^ 또는 HEAD~ 으로 표현한다.

HEAD 기준으로 이전 3번째 커밋을 가리킨다면 HEAD^^^ 또는 HEAD~~~ 이다.

아니면 숫자를 사용하여 HEAD^3 또는 HEAD~3 으로 표현한다.

 

AHEAD, BHEAD

HEAD 앞에 A 또는 B가 붙은 포인터도 있다.

원격 저장소와 연동하여 깃을 관리한다면 브랜치마다 HEAD가 2개 있다.

로컬 저장소 브랜치의 HEAD 포인터와 원격 저장소 브랜치의 HEAD 포인터이다.

 

원격 저장소와 로컬 저장소는 물리적으로 서로 다른 저장소이다.

따라서 두 저장소의 마지막 커밋 위치가 일치하지 않을 수 있다.

이는 서로 다른 커밋을 가리키는 HEAD 포인터를 가진다는 의미다.

 

AHEAD와 BHEAD는 서로 다른 저장소 간 HEAD 포인터의 위치 차이를 의미한다.

깃은 항상 원격 저장소의 HEAD와 로컬 저장소의 HEAD를 비교한다.

HEAD는 브랜치마다 다르고 브랜치를 여러 개 운영하면 다수의 AHEAD, BHEAD가 생길 수 있다.

 

AHEAD

서버로 전송되지 않은 로컬 커밋이 있는 것이다.

로컬 저장소에서 새로운 커밋을 생성하고 원격 저장소로 전송하지 않은 상황일 때

AHEAD가 발생한다.

로컬 저장소의 HEAD 포인터를 기준으로 로컬 브랜치에 있는 커밋이 서버의 커밋 개수보다 많은 경우다.

 

BHEAD

원격저장소에서 로컬 저장소로 내려받지 않은 커밋이 있는 것이다.

원격 저장소의 커밋이 자신의 로컬 저장소보다 더 최신 상태인 것을 의미한다.

728x90

'GIT' 카테고리의 다른 글

[GIT] 원격 브랜치  (0) 2022.08.05
[GIT] 브랜치 생성과 이동 동시에 하기  (0) 2022.08.03
[GIT] 브랜치 로그  (0) 2022.08.02
[GIT] 브랜치 이동  (0) 2022.08.02
[GIT] 브랜치 확인  (0) 2022.08.02