추천 게시물
Git의 브랜치에서 head, master, main, origin 의 뜻
- 공유 링크 만들기
- X
- 이메일
- 기타 앱
목차
Git을 사용하면서 우리는 수많은 용어와 마주하게 된다. 특히 브랜치를 다루기 시작하면 HEAD
, master
, main
, origin
과 같은 단어들이 시도 때도 없이 등장하며 초심자를 혼란에 빠뜨린다. 이들은 Git의 작동 방식을 이해하는 데 있어 가장 핵심적인 개념들이지만, 그 관계를 명확히 알지 못하면 Git을 절반도 활용하지 못하는 것과 같다.
이 글에서는 Git의 브랜치와 관련된 네 가지 핵심 용어가 각각 무엇을 의미하며, 서로 어떻게 상호작용하는지 명확하게 설명한다. 이 개념들만 확실히 이해해도 Git을 훨씬 더 자신감 있게 다룰 수 있게 될 것이다.
1. `master`와 `main`: 중심이 되는 브랜치
가장 먼저 이해해야 할 것은 브랜치(Branch)다. 브랜치는 프로젝트의 특정 개발 흐름을 의미한다. 나무의 원줄기에서 가지(branch)가 뻗어 나가듯, 기본 개발 줄기에서 새로운 기능 개발이나 버그 수정을 위한 작업 흐름을 분리할 때 브랜치를 사용한다.
master
는 이 수많은 브랜치 중에서도 전통적으로 사용되어 온 기본(default) 브랜치의 이름이다. 프로젝트의 가장 중심이 되는 줄기로, 보통 최종적으로 완성된 안정적인 버전의 코드가 모이는 곳이다.
최근에는 'master/slave'라는 단어가 주는 부정적인 어감을 피하기 위해 많은 플랫폼에서 기본 브랜치 이름을 main
으로 변경하고 있다. GitHub에서 새로 저장소를 만들면 기본 브랜치가 main
으로 생성되는 것이 그 예다.
핵심:master
와main
은 기술적으로 동일한 역할을 하는, 프로젝트의 중심 브랜치를 부르는 이름이다. 이는 강제 규칙이 아닌 '사회적 약속(Convention)'이지만, 협업의 효율성을 위해 따르는 것이 좋다.
2. `HEAD`: '현재 위치'를 가리키는 특별한 포인터
HEAD
는 Git 세계에서 'You are here'라고 표시된 지도 위의 핀과 같다. 즉, 내가 현재 작업하고 있는 위치(특정 브랜치 또는 특정 커밋)를 가리키는 특별한 포인터다.
대부분의 경우, 우리는 특정 브랜치 위에서 작업을 한다. 예를 들어 main
브랜치에서 작업 중이라면, HEAD
는 main
브랜치를 가리킨다. 그리고 main
브랜치는 다시 해당 브랜치의 가장 최신 커밋을 가리킨다. 이를 도식화하면 다음과 같다.
일반적인 상태: HEAD가 브랜치를 가리킴
만약 git checkout [과거 커밋 ID]
명령어로 특정 과거 시점으로 이동하면, HEAD
는 브랜치를 떠나 해당 커밋을 직접 가리키게 되는데, 이를 'detached HEAD' 상태라고 부른다.
핵심:master
나main
이 특정 개발 흐름(브랜치)의 이름이라면,HEAD
는 그중에서 내가 지금 당장 서 있는 지점을 알려주는 동적인 표시다.
3. `origin`: 원격 저장소의 '별명'
Git은 분산 버전 관리 시스템(DVCS)이다. 이는 내 컴퓨터(로컬)에 완전한 저장소가 하나 있고, 팀원들과 코드를 공유하기 위한 중앙 서버(원격)에도 별도의 저장소가 있다는 뜻이다. origin
은 바로 이 원격 저장소(Remote Repository)를 가리키는 기본 별명이다.
GitHub에서 저장소를 git clone
명령어로 복제해 오면, Git은 매번 긴 주소를 입력하는 불편함을 덜어주기 위해 자동으로 'origin'이라는 별명을 붙여준다. 물론 이 별명은 git remote
관련 명령어를 통해 다른 이름으로 변경하거나, 여러 개의 원격 저장소를 다른 별명으로 추가하는 것도 가능하다.
따라서 origin/main
과 같은 표기는 "origin
이라는 별명을 가진 원격 저장소에 있는 main
브랜치"를 의미한다. 이는 내 컴퓨터가 마지막으로 원격 저장소와 통신했을 때 기억하고 있는 원격 저장소의 브랜치 상태를 나타낸다.
핵심: origin
은 원격 저장소의 주소를 가리키는 기본 별명(nickname)이다. 이는 고정된 시스템 이름이 아니라 변경 가능한 설정값이다.
결론: 포인터와 이름표로 이해하기
네 가지 개념의 관계를 간단히 정리하면 다음과 같다.
master
/main
: 프로젝트의 중심 스토리가 담긴 '책의 제목'HEAD
: 내가 지금 읽고 있는 '페이지를 짚은 손가락'origin
: 그 책의 원본이 보관된 중앙 도서관의 '별명'
이처럼 Git의 브랜치 관련 용어들은 복잡한 규칙이 아니라, 특정 위치(커밋)나 주소를 가리키는 다양한 종류의 포인터와 이름표에 불과하다. 각자의 역할과 관계를 명확히 이해하면, 복잡하게 얽힌 브랜치와 커밋 기록 속에서도 길을 잃지 않고 자유롭게 개발 작업을 진행할 수 있을 것이다.
- 공유 링크 만들기
- X
- 이메일
- 기타 앱
댓글
댓글 쓰기