브랜칭(Branching)은 거의 모든 현대 버전 관리 시스템이 갖춘 핵심 기능입니다. 브랜치를 활용하면 개발자가 메인 코드 버전에 영향을 주지 않고 독립적으로 변경 작업을 진행할 수 있습니다.
다른 버전 관리 시스템에서는 브랜칭이 까다로운 작업일 수 있습니다. 일부 시스템은 코드 사본을 통째로 새로 만들어야 하기 때문에 규모가 큰 프로젝트에서는 상당히 번거롭습니다. 반면 Git은 간결한 브랜칭 기능을 제공하여 여러 브랜치 사이를 손쉽게 오갈 수 있습니다.
이 튜토리얼에서는 예제와 함께 Git 브랜칭의 기본 개념과 git branch 명령어 사용법을 살펴봅니다. 끝까지 읽고 나면 Git 브랜칭을 능숙하게 다룰 수 있게 될 것입니다.
Git 브랜치란?
브랜치는 Git으로 작업할 때 빼놓을 수 없는 필수 요소입니다.
실제 프로젝트에서는 새로운 기능 추가나 버그 수정 작업마다 별도의 브랜치를 만드는 것이 일반적입니다. 브랜치를 사용하면 메인 코드베이스에 영향을 주지 않고 저장소에서 작업할 수 있기 때문입니다. 개발자는 기능 개발이나 버그 수정을 완료한 뒤, 다른 팀원들과 검토 과정을 거쳐 프로젝트의 메인 코드에 병합(merge)할 수 있습니다.
이러한 개발 방식은 오류가 포함된 코드가 메인 코드베이스에 병합될 위험을 크게 줄여줍니다.
Git에서 브랜치는 저장소 안에 만들어지는 새로운 작업 흐름입니다. 각 브랜치는 코드베이스의 자체 버전을 가지며, 메인 브랜치와 독립적으로 발전합니다. 대부분의 코드베이스에서 이 메인 브랜치는 '마스터(master) 브랜치'라고 부릅니다.
브랜치는 마스터 브랜치와 독립적이기 때문에, 여러 기능을 동시에 병렬로 개발하는 데 활용할 수 있습니다. 변경 사항이 준비되면 마스터 브랜치, 즉 메인 코드 버전에 병합하면 됩니다.
Git 브랜치 명령어
사용자가 생성한 브랜치는 마스터 브랜치와 독립적입니다. 각 브랜치는 고유한 커밋 히스토리를 가지며, 특정 브랜치에 푸시(push)한 변경 사항은 해당 브랜치에만 나타납니다.
브랜치를 '같은 코드베이스의 여러 버전을 만드는 도구'라고 생각하면 이해하기 쉽습니다. 예를 들어 한 브랜치에는 개발 중인 새 기능의 코드를 담고, 다른 브랜치에는 해결된 오픈 이슈가 반영된 업데이트 버전을 저장할 수 있습니다.
git branch 명령어는 Git에서 브랜치를 다룰 때 사용합니다. 이 명령어로 브랜치를 생성, 이름 변경, 삭제할 수 있으며, 브랜치 목록을 조회할 수도 있습니다.
또한 git branch는 git checkout 및 git merge 명령어와 함께 자주 사용됩니다. git checkout은 코드베이스의 버전 간 전환에, git merge는 서로 다른 버전의 병합에 사용됩니다. 이 두 명령어에 대해서는 별도의 튜토리얼에서 자세히 다룹니다.
이제 Git 브랜칭의 기본을 익혔으니, git branch 명령어가 지원하는 플래그와 매개변수를 활용하는 방법을 하나씩 살펴보겠습니다.
브랜치 목록 조회
Git 저장소의 브랜치 목록을 확인하려면 git branch 명령어를 사용합니다. 문법은 다음과 같습니다.
git branch
명령어 실행 결과 예시는 다음과 같습니다.
* master
* v0.9
* v0.8
위와 같이 git branch 명령어는 저장소에 있는 브랜치 목록을 반환합니다. git branch --list라고 입력해도 동일하게 브랜치 목록을 확인할 수 있습니다.
브랜치 생성
코드베이스에 'v0.9.1'이라는 브랜치를 만들고 싶다고 가정해 보겠습니다. 다음 코드로 생성할 수 있습니다.
git branch v0.9.1
이 명령어는 v0.9.1이라는 이름의 새 브랜치를 생성합니다. 단, 명령어를 실행해도 개발 환경은 여전히 저장소의 HEAD에 연결되어 있습니다. 따라서 새 브랜치로 이동하려면 git checkout 명령어를 사용해야 합니다.
새 브랜치를 생성할 때 저장소에는 '새 브랜치가 존재한다'는 사실 외에 어떤 변화도 일어나지 않습니다. 저장소의 히스토리도 그대로 유지됩니다. 브랜치를 생성하면 Git은 새 브랜치를 가리키는 포인터만 만들기 때문입니다.
브랜치에 코드를 커밋하고 싶다면 git checkout, git add, git commit 명령어를 사용해야 합니다.
브랜치 삭제
Git 저장소에서 브랜치를 삭제하려면 -d 플래그를 사용합니다.
v0.9.1 브랜치를 삭제하기로 결정했다고 가정해 보겠습니다. 브랜치를 삭제하는 명령어는 다음과 같습니다.
git branch -d v0.9.1
이 명령어는 브랜치를 삭제합니다. 다만 -d 플래그는 안전 삭제(safe delete) 방식으로 동작합니다. 즉, 아직 다른 브랜치에 병합되지 않은 변경 사항이 있다면 해당 브랜치는 삭제되지 않습니다. 덕분에 병합하고 싶은 코드가 담긴 브랜치를 실수로 잃어버리는 일을 막을 수 있습니다.
병합되지 않은 변경 사항이 있더라도 강제로 브랜치를 삭제하려면 -D 플래그를 사용합니다. 이 경우 브랜치가 영구적으로 삭제됩니다. -D 플래그의 문법은 다음과 같습니다.
git branch -D v0.9.1
명령어를 실행하면 브랜치가 삭제됩니다. -D 플래그는 실행 시 경고 없이 바로 삭제하기 때문에, 브랜치 삭제가 확실한 경우에만 사용해야 합니다.
git branch -d/-D 명령어를 실행하면 로컬에 있는 브랜치 사본이 삭제됩니다. 하지만 저장소가 원격(remote)에 저장되어 있다면, 원격 저장소에는 해당 브랜치가 여전히 남아 있을 수 있습니다.
원격 저장소의 브랜치까지 삭제하려면 별도의 명령어를 실행해야 합니다. 원격 저장소에 v0.9.1 브랜치를 삭제하라고 알리고 싶다면 다음 명령어를 사용합니다.
git push origin :v0.9.1
위 명령어를 실행하면 원격 저장소의 v0.9.1 브랜치가 삭제됩니다.
브랜치 이름 변경
-m 플래그를 사용하면 Git 브랜치의 이름을 변경할 수 있습니다.
-m 플래그는 현재 체크아웃한 브랜치의 이름을 변경합니다. 현재 보고 있는 v0.9.2 브랜치의 이름을 v1로 바꾸고 싶다면 다음 코드를 사용합니다.
git branch -m v1
이 명령어는 현재 브랜치의 이름을 v1로 변경합니다.
마무리
git branch 명령어는 브랜치를 생성, 이름 변경, 삭제하는 데 사용되며, Git 저장소와 연관된 브랜치 목록을 조회할 때도 활용할 수 있습니다.
단, 브랜치에 코드를 커밋하려면 코드베이스의 변경 사항을 저장하는 데 쓰이는 git checkout, git add, git commit 같은 명령어를 함께 사용해야 합니다.
이번 튜토리얼에서는 예제와 함께 Git 브랜칭의 기본 개념과 git branch 명령어 사용법을 살펴보았습니다. 이제 여러분도 전문 개발자처럼 Git에서 브랜치를 자유롭게 다룰 준비가 되었습니다!