개발 작업을 할 때, 개발자들은 작업 레파지토리에서 소스 코드를 공유합니다. 연관성이 없는 기능을 개발한다고 할 때 어떤 개발자는 A 기능을 작업하고 또 다른 개발자는 B 기능을 맡아 작업한다고 가정해보도록 하겠습니다.
만약 A 작업이 다 끝난 뒤에 B 작업을 수행한다면 연관성이 없는 기능 단위의 작업을 비효율적으로 하고 있는 것입니다. 별도로 작업하여 합치는 방안이 가장 좋을 것입니다. Git에서는 브랜치와 머지라는 명령으로 이것을 가능하게 합니다.
브랜치는 독립적인 작업을 할 수 있는 공간입니다. A 기능을 A 브랜치에서 작업하고, B 기능을 B 브랜치에서 작업하면 서로 독립적인 공간에서 작업하는 것이기 때문에 서로에게 영향을 주지 않고 작업할 수 있습니다.
메인 작업 공간의 코드를 복사한 개별적인 작업 공간을 만들고 거기서 각각의 기능 개발을 진행합니다. 그리고 작업이 완료되었을 때, 코드를 합치면 될 것입니다.
개발자는 기능 브랜치에서 작업한 내용을 기본 브랜치로 바로 커밋을 날릴 수 있고 코드를 병합(merge)하고 업데이트 할 수 있습니다. 브랜치로 작업을 하면 브랜치 단위로 업데이트가 되기 때문에 충돌이 일어나는 일을 방지하기 좋습니다.
git 에서의 기본 브랜치는 master 브랜치 (GitHub은 main) 입니다. 기본 브랜치는 git 저장소를 초기화 할 때 자동으로 만들어집니다. 이때, HEAD
라는 특수한 포인터가 있습니다. 이 포인터는 지금 작업 중인 브랜치를 가리킵니다.
<aside>
💡 *main
브랜치 또는 master
브랜치는 기본 브랜치를 의미합니다. master 라는 단어가 노예제를 떠올리게 한다는 이유로 많은 코드에서 master 대신 main을 채택하고 있습니다.
git config --global init.defaultBranch main
명령을 통해 git 에서도 GitHub 처럼 기본 브랜치를 main으로 사용할 수 있습니다.*
</aside>
하나의 기능 개발이 완료되면 특정 브랜치의 내용들을 main 브랜치에 합칩니다. 또 새로운 작업을 하려고 하면 main 브랜치에서 다시 새로운 feature 브랜치를 생성하고 작업합니다.
특정 기능을 작업하고 있는데 급하게 버그를 수정해야 하는 경우가 발생합니다. 이런 경우 현재의 작업 상태를 임시로 커밋해두고 이전 기능 작업 중인 상태로 브랜치(작업폴더)를 변경할 수 있습니다.
버그 패치용 브랜치를 만들고 수정 작업을 합니다. 이후 작업이 완료되면 버그 패치용 브랜치의 추가된 변경 내역을 main 브랜치에 합칠 수 있습니다. 이런 과정을 거치면 main 브랜치는 가장 최근에 배포한 소스코드의 커밋을 가리키고 있게 됩니다.
<aside>
💡 Origin
원격 저장소의 이름입니다.
remote 나 clone 을 통해 자동으로 origin 이라는 이름의 원격저장소가 등록되게 됩니다.
HEAD
현재 내가 어떤 작업공간에 있는지 나타냅니다. 예를들어 main 브랜치에서 작업을 하고 있다면 HEAD 는 main 브랜치에 있게 되고, feature 브랜치를 만들어줬다면 HEAD는 feature 브랜치에 있게 됩니다.
</aside>