마지막 커밋
깃은 마지막 커밋 정보를 기반으로 새로운 커밋을 생성한다. 시스템이 매번 커밋할 때마다 마지막 커밋 정보를 찾으면 부하가 발생하기 때문에 깃은 마지막 커밋을 쉽게 확인할 수 있도록 HEAD라는 특수한 포인터를 제공한다. HEAD는 작업 중인 브랜치의 마지막 커밋 ID를 가리키는 참조 포인터이다. 깃은 마지막 커밋을 가리키는 HEAD 포인터를 부모 커밋으로 대체하여 사용하기 때문에 빠르게 스냅샷을 생성할 수 있다.
master 브랜치의 마지막 커밋은 e0b2fc4이고, footer 브랜치의 마지막 커밋은 c6e3f34이다. master 브랜치에서 새로운 커밋을 생성할 때 부모 커밋으로 e0b2fc4을 가리키는 HEAD 포인터를 사용한다. footer 브랜치에서 새로운 커밋을 생성할 때는 c6e3f34를 가리키는 HEAD 포인터를 사용한다. 그리고 각 브랜치의 마지막 HEAD 포인터를 사용하여 커밋한다. 현재 HEAD는 footer 브랜치의 c6e3f34를 가리키고 있다.
브랜치 HEAD
브랜치를 이동하면 HEAD 포인터도 이동된다. 각각의 브랜치마다 마지막 커밋이 다르기 때문에 브랜치가 여러 개라면 HEAD 포인터도 여러 개이다. 브랜치마다 마지막 커밋 ID를 가리키는 HEAD 포인터가 하나씩 존재한다.
master 브랜치로 변경한 후 HEAD 포인터의 위치는 이동된 브랜치의 마지막 커밋 e0b2fc4를 가리킨다. 즉, HEAD 포인터가 현재 작업하는 브랜치를 가리키기 때문에 HEAD 포인터는 브랜치의 위치에 따라 달라진다.
AHEAD, BHEAD
원격 저장소와 연동하여 깃을 관리한다면 브랜치마다 HEAD가 2개 있다. 로컬 저장소 브랜치의 HEAD 포인터와 원격 저장소 브랜치의 HEAD 포인터이다. 원격 저장소와 로컬 저장소는 물리적으로 서로 다른 저장소이므로 두 저장소의 마지막 커밋 위치가 일치하지 않을 수 있다. 이는 서로 다른 커밋을 가리키는 HEAD 포인터를 가진다는 의미이다.
AHEAD와 BHEAD는 서로 다른 저장소 간 HEAD 포인터의 위치 차이를 의미한다. 깃은 항상 원격 저장소의 HEAD와 로컬 저장소의 HEAD를 비교한다.
AHEAD
AHEAD는 서버로 전송되지 않은 로컬 커밋이 있는 것이다. 예를 들어, 저장소에 새로운 커밋을 생성하고, 새로운 커밋 정보를 서버로 전송하지 않은 상황에 AHEAD가 발생한다. 로컬 저장소의 HEAD 포인터를 기준으로 로컬 브랜치에 있는 커밋이 서버의 커밋 개수보다 많은 경우이다.
BHEAD
BHEAD는 로컬 저장소로 내려받지 않은 커밋이 있는 것이다. 예를 들어, 누군가 서버에 새로운 커밋을 했지만 로컬 저장소가 서버의 새로운 커밋을 내려받지 않았다면 BHEAD가 발생한다. 다른 개발자가 코드를 수정하여 원격 저장소의 커밋이 자신의 로컬 저장소보다 더 최신 상태인 것을 의미한다.
'Git' 카테고리의 다른 글
브랜치 패치 (0) | 2025.03.13 |
---|---|
원격 브랜치 (0) | 2025.03.09 |
브랜치 (0) | 2025.03.07 |
원격에서 수동으로 내려받기 (0) | 2025.03.02 |
원격에서 자동으로 내려받기 (0) | 2025.03.02 |