Git의 내부 구조: 브랜치 이해하기
브랜치란 무엇인가?
브랜치는 관련된 변경 사항들을 한 줄로 묶어 관리하는 별도의 작업 공간입니다. 예를 들어, 기능 추가, 버그 수정 등 각 작업을 독립적으로 진행할 때 사용됩니다. 하지만 실제로 브랜치는 단지 특정 커밋을 쉽게 부를 수 있게 만들어진 이름표에 불과합니다.
브랜치의 실제 정체
브랜치는 커밋을 가리키는 이름 붙인 포인터입니다. 원하면 커밋의 고유한 해시값으로도 접근할 수 있지만, 사람이 알아보기 쉽도록 이름을 붙여 사용합니다. 즉, 브랜치는 커밋을 간편하게 가리키는 도구입니다.
기본 브랜치: 'main'과 'master'
새로 저장소를 만들 때 기본적으로 생성되는 'main' 혹은 'master' 브랜치는 다른 브랜치들과 기능적으로 큰 차이가 없습니다. 단지 많이 사용되는 관례일 뿐, 필요에 따라 어떤 이름이든 브랜치로 쓸 수 있습니다.
브랜치는 어떻게 동작하는가?
작업을 하다가 변경사항을 커밋하면, 브랜치는 항상 최신 커밋을 가리키게 됩니다. 예를 들어, 첫 번째 커밋 후 두 번째 커밋을 하면 브랜치는 두 번째 커밋을 가리키게 되는 식입니다.
새로운 브랜치 만들기
새로운 브랜치를 만들 때는 다음 명령어를 사용합니다:
git branch test이렇게 하면 현재 브랜치가 가리키는 커밋을 'test'라는 이름으로 가리키는 새로운 포인터가 생성됩니다.
현재 내가 작업 중인 브랜치는 어떻게 알까?
Git은 HEAD라는 특별한 포인터를 사용해서, 우리가 현재 어떤 브랜치에서 작업 중인지 기억합니다. 대부분의 경우 HEAD는 브랜치를 가리키고, 해당 브랜치는 다시 하나의 커밋을 가리킵니다.
브랜치 전환과 HEAD의 역할
브랜치를 옮길 때는 아래처럼 명령을 입력합니다:
git checkout test이렇게 하면 HEAD가 'test' 브랜치를 가리키게 되어, 변화가 그 브랜치에 기록됩니다. 또, 새로운 브랜치를 만들면서 바로 전환하고 싶다면:
git checkout -b test으로 한 번에 처리할 수 있습니다.
커밋은 어디에 추가될까?
HEAD가 가리키는 브랜치가 현재 작업 브랜치입니다. 새로운 커밋을 만들면, 해당 커밋은 현재 브랜치에 추가되고, 브랜치 포인터가 최신 커밋으로 이동합니다.
브랜치 이동 후 커밋의 흐름
다른 브랜치로 이동하면 HEAD가 새 브랜치로 바뀌고, 이후 커밋은 그 새 브랜치에 기록됩니다. 즉, 어떤 브랜치에서 작업하느냐에 따라 변경 내역이 반영되는 라인이 달라집니다.
다음 단계 예고
다음엔 작업 디렉터리, 스테이징 영역, 저장소의 관계를 살펴볼 예정입니다. 명령어 없이 내부 구조만으로 저장소와 브랜치, 커밋이 어떻게 만들어지는지 알아볼 예정이니, 다음 내용을 기대해 주세요.
출처 및 참고 :
