브랜치의 원리와 생성·전환·삭제 방법을 배운다. 브랜치 기반 워크플로우(GitHub Flow, Git Flow)를 이해하고, HEAD 포인터가 어떻게 이동하는지 시각적으로 파악한다.
브랜치 — Git의 핵심 강점
Git에서 브랜치는 매우 가볍습니다. 브랜치는 단순히 특정 커밋을 가리키는 포인터(40바이트 파일)에 불과합니다. 브랜치를 만드는 데 0.1초도 안 걸리고, 수십 개를 만들어도 저장 공간이 거의 늘지 않습니다.
브랜치를 쓰면 현재 안정적인 코드(main)를 건드리지 않고, 독립적인 공간에서 새 기능을 개발하거나 버그를 수정할 수 있습니다.
브랜치와 HEAD의 동작 원리
커밋 이력 예시:
A ← B ← C (main, HEAD)
브랜치 생성:
A ← B ← C (main)
↑
(feature/login) ← HEAD
feature 브랜치에서 커밋:
A ← B ← C (main)
↖
D ← E (feature/login, HEAD)
→ main은 C에 그대로, feature만 앞으로 이동
→ HEAD는 현재 체크아웃된 브랜치를 가리킴
브랜치 명령어
# 브랜치 목록
git branch # 로컬 브랜치
git branch -r # 원격 브랜치
git branch -a # 전체 (로컬 + 원격)
git branch -v # 각 브랜치의 최신 커밋
# 브랜치 생성
git branch feature/login
# 브랜치 전환
git checkout feature/login # 구식 (여전히 작동)
git switch feature/login # 모던 (Git 2.23+, 권장)
# 생성과 동시에 전환
git checkout -b feature/login
git switch -c feature/login # 모던
# 특정 커밋/태그에서 브랜치 생성
git switch -c hotfix/bug-42 abc1234
git switch -c release/v1.0 v0.9.0
# 브랜치 이름 변경
git branch -m old-name new-name
git branch -m new-name # 현재 브랜치 이름 변경
# 브랜치 삭제
git branch -d feature/login # 병합된 브랜치만 삭제
git branch -D feature/login # 강제 삭제 (병합 여부 무관)
# 원격 브랜치 삭제
git push origin --delete feature/login
브랜치 네이밍 컨벤션
일반적으로 사용되는 패턴:
main → 배포 가능한 안정 버전 (구: master)
develop → 개발 통합 브랜치 (Git Flow에서)
feature/기능명 → 새 기능 개발
feature/user-auth
feature/payment-integration
feature/dark-mode
fix/ or bugfix/ → 버그 수정
fix/login-error
bugfix/cart-total-calculation
hotfix/ → 운영 중 긴급 수정
hotfix/security-patch-2024
release/버전 → 릴리즈 준비
release/v1.2.0
refactor/ → 리팩터링
docs/ → 문서 작업
GitHub Flow — 가장 단순한 브랜치 전략
소규모 팀과 지속적 배포 환경에 적합합니다.
1. main 브랜치는 항상 배포 가능 상태 유지
2. 작업 시작: main에서 기능 브랜치 생성
git switch -c feature/new-feature
3. 작업 후 커밋, push
4. Pull Request 생성 → 코드 리뷰
5. 리뷰 통과 → main에 merge
6. 즉시 배포
Git Flow — 릴리즈 주기가 있는 팀
브랜치 구조:
main → 릴리즈 이력 (태그 포함)
develop → 개발 통합
feature/* → main 기능 개발 (develop에서 분기)
release/* → 릴리즈 준비 (develop → main)
hotfix/* → 긴급 수정 (main에서 분기, main+develop에 병합)
흐름:
develop ──── feature/A ──── (병합) ───────────────┐
▼
develop ──────────────── release/v1.0 ──── main (v1.0 태그)
↗
최종 QA 여기서
브랜치 체크아웃 시 주의사항
# 수정된 파일이 있으면 브랜치 전환 실패
git switch develop
# error: Your local changes would be overwritten
# 해결 방법 1: 커밋
git add . && git commit -m "WIP: 진행중"
# 해결 방법 2: stash로 임시 저장
git stash
git switch develop
# 다시 돌아와서
git switch feature/login
git stash pop
Detached HEAD 상태
# 특정 커밋을 직접 체크아웃하면 "Detached HEAD" 상태
git checkout abc1234
# HEAD가 브랜치가 아닌 커밋을 직접 가리킴
# 이 상태에서 커밋하면 브랜치 없이 떠다니는 커밋이 됨!
# 확인
git status # HEAD detached at abc1234
# 해결: 새 브랜치 생성하거나 브랜치로 돌아가기
git switch -c inspect/old-version # 브랜치로 만들기
git switch main # 원래 브랜치로 복귀
관련 검색어 · git branch 사용법, git switch checkout, GitHub Flow Git Flow, HEAD 포인터, 브랜치 네이밍, Detached HEAD