브랜치가 왜 필요한지 원리 이해, git branch로 생성·조회·삭제, git switch로 브랜치 이동, HEAD 포인터 개념, 기능·실험을 메인 코드에 영향 없이 독립적으로 작업하는 브랜치 전략을 완전히 익힙니다.
🎯 학습 목표
이 강을 마치면 다음을 할 수 있습니다.
- 브랜치가 무엇인지, 왜 필요한지 원리 수준에서 설명할 수 있습니다.
git branch로 브랜치를 생성·조회·삭제할 수 있습니다.git switch로 브랜치 간 자유롭게 이동할 수 있습니다.- HEAD 포인터가 현재 브랜치를 어떻게 가리키는지 이해합니다.
🌿 브랜치란 무엇인가
이 섹션에서는 브랜치의 개념과 Git이 내부적으로 브랜치를 어떻게 구현하는지 살펴보겠습니다.
브랜치(Branch)는 커밋 히스토리에서 독립적인 작업 흐름을 만드는 것입니다. "나뭇가지"라는 뜻 그대로, 하나의 줄기(main)에서 가지(feature branch)가 뻗어 나와 독립적으로 자라다가 나중에 다시 합쳐지는 구조입니다.
Git 브랜치의 핵심을 이해하려면 내부 구현을 알아야 합니다. 브랜치는 단순히 특정 커밋을 가리키는 포인터(참조값)입니다. 새 브랜치를 만드는 것은 포인터 하나를 더 만드는 것뿐이며, 파일을 복사하거나 폴더를 만드는 것이 아닙니다. 그래서 브랜치 생성이 거의 즉각적이고, 여러 브랜치를 동시에 많이 만들어도 용량이 크게 늘지 않습니다.
# 현재 상태 개념적 표현
main → 커밋 C3
feature → 커밋 C3 (같은 지점에서 시작)
# feature 브랜치에서 새 커밋 추가 후
main → 커밋 C3
feature → 커밋 C4 (C3에서 분기)
❓ 브랜치가 왜 필요한가
이 섹션에서는 브랜치 없이 개발할 때 생기는 문제와 브랜치가 이를 어떻게 해결하는지 살펴보겠습니다.
브랜치가 없다면 어떻게 될까요? 팀에서 두 명의 개발자가 같은 파일을 동시에 수정하면 한 명의 작업이 다른 한 명의 작업을 덮어쓰게 됩니다. 또는 기능 개발 도중 갑자기 긴급 버그 수정이 필요할 때, 반쯤 완성된 코드와 버그 수정이 뒤섞이게 됩니다.
브랜치가 해결하는 실제 문제들입니다.
- 기능 개발 격리: 새 기능을 개발하는 동안 main 브랜치는 항상 안정적인 상태 유지. 기능이 완성되고 검증된 후에만 main에 합칩니다.
- 버그 수정 긴급 대응: 개발 중인 작업을 건드리지 않고 main에서 바로 hotfix 브랜치를 만들어 수정·배포합니다.
- 병렬 협업: 여러 개발자가 서로 다른 브랜치에서 동시에 작업하고, 완성된 것만 순서대로 합칩니다.
- 실험적 시도: 결과가 불확실한 리팩토링이나 새 기술 도입을 실험 브랜치에서 시도하고, 마음에 들면 합치고 아니면 브랜치를 삭제합니다.
🛠️ git branch — 브랜치 생성·조회·삭제
이 섹션에서는 브랜치를 관리하는 기본 명령어 git branch의 다양한 사용법을 살펴보겠습니다.
# 현재 모든 브랜치 조회 (* 표시가 현재 브랜치)
git branch
# * main
# feature-login
# fix-header-bug
# 원격 브랜치 포함 조회
git branch -a
# 새 브랜치 생성 (이동하지는 않음)
git branch feature-login
# 브랜치 삭제 (병합된 브랜치만)
git branch -d feature-login
# 브랜치 강제 삭제 (병합 여부 무관)
git branch -D experiment-failed
# 브랜치 이름 변경 (현재 브랜치)
git branch -m 새이름
# 특정 브랜치 이름 변경
git branch -m 기존이름 새이름
브랜치 이름은 관행적으로 목적을 명확히 나타내는 방식을 사용합니다.
feature/login또는feat/login: 새 기능 개발fix/header-bug또는bugfix/header-overlap: 버그 수정hotfix/critical-payment-error: 긴급 프로덕션 버그 수정release/v1.2.0: 릴리즈 준비chore/update-dependencies: 유지보수 작업
🔀 git switch — 브랜치 이동
이 섹션에서는 브랜치 간 이동 명령어 git switch와 작업 중인 변경 사항이 있을 때 주의할 점을 살펴보겠습니다.
git switch는 현재 작업 브랜치를 변경합니다. 브랜치를 이동하면 작업 디렉터리의 파일들이 해당 브랜치의 최신 커밋 상태로 자동으로 변경됩니다.
# 브랜치 이동
git switch feature-login
# 브랜치 생성 + 이동 (자주 쓰는 패턴)
git switch -c feature-signup
# -c 는 --create 의 단축형
# 이전 브랜치로 돌아가기 (-)
git switch -
# 출력:
# Switched to branch 'feature-login'
# 또는
# Switched to a new branch 'feature-signup'
구버전과의 차이: 과거에는
git checkout feature-login을 사용했습니다.git checkout은 브랜치 이동·파일 복원 등 여러 기능이 혼재해 혼란스러웠습니다. Git 2.23(2019년)부터git switch(브랜치 이동)와git restore(파일 복원)로 기능이 분리됐습니다. 현재는switch와restore사용이 권장됩니다.
브랜치 이동 전 주의사항: 현재 브랜치에 커밋하지 않은 변경 사항이 있을 때 이동하면 두 가지 상황이 생깁니다.
- 다른 브랜치와 충돌하지 않는 변경이면 그대로 가져갑니다. (의도하지 않은 혼재 위험)
- 충돌할 경우 Git이 이동을 거부하고 커밋하거나 stash하라고 안내합니다.
# 브랜치 이동 전 변경 사항 임시 저장 (stash)
git stash # 변경 사항을 임시 저장소에 보관
git switch main # 이동
# ... 작업 후 ...
git switch feature-login
git stash pop # 보관했던 변경 사항 복원
📍 HEAD — 지금 내가 있는 위치
이 섹션에서는 Git에서 현재 위치를 나타내는 핵심 개념 HEAD를 살펴보겠습니다.
HEAD는 현재 작업 중인 위치를 가리키는 특수 포인터입니다. 보통 HEAD는 현재 브랜치의 최신 커밋을 가리킵니다. 브랜치를 이동하면 HEAD도 함께 이동합니다.
# HEAD 확인 방법
git log --oneline -1
# a1b2c3d (HEAD -> main) feat: 로그인 기능 추가
# ↑ HEAD가 main 브랜치를 가리키고 있음
# 브랜치 이동 후
git switch feature-login
git log --oneline -1
# d4e5f6g (HEAD -> feature-login) feat: 로그인 UI 초안
# ↑ HEAD가 feature-login을 가리킴
git log에서 (HEAD -> main)처럼 HEAD가 브랜치 이름과 함께 표시됩니다. HEAD를 직접 사용해 현재 위치 기준의 참조도 가능합니다. 예를 들어 HEAD~1은 현재 커밋의 직전 커밋, HEAD~2는 두 커밋 전을 의미합니다.
💼 실전 브랜치 작업 흐름
이 섹션에서는 실제 개발에서 브랜치를 어떻게 활용하는지 단계별로 살펴보겠습니다.
일반적인 기능 개발 시 브랜치 사용 흐름입니다.
# 1. 현재 상태 확인
git status
git branch
# * main
# 2. 새 기능 브랜치 생성 및 이동
git switch -c feature/user-profile
# 3. 기능 개발 (여러 커밋)
# ... 파일 수정 ...
git add .
git commit -m "feat: 사용자 프로필 컴포넌트 구조 추가"
# ... 추가 수정 ...
git add .
git commit -m "feat: 프로필 이미지 업로드 기능 구현"
# 4. 현재 상황 확인
git log --oneline --graph --all
# * d4e5f6g (HEAD -> feature/user-profile) feat: 프로필 이미지 업로드
# * c3d4e5f feat: 사용자 프로필 컴포넌트 구조 추가
# * a1b2c3d (main) feat: 로그인 기능 추가
# 5. 필요하면 main으로 돌아가 긴급 작업
git switch main
git switch -c hotfix/login-error
# ... 버그 수정 ...
git commit -m "fix: 로그인 토큰 만료 처리 오류 수정"
# 6. 다시 기능 개발 브랜치로 복귀
git switch feature/user-profile
이 흐름에서 중요한 점은 main 브랜치에서는 직접 작업하지 않는다는 원칙입니다. 아무리 작은 수정도 브랜치를 만들어서 작업하고 검증 후 합치는 것이 팀 협업의 기본입니다.
📝 핵심 요약
7강에서 배운 내용을 정리해 보겠습니다.
# 오늘의 핵심 명령어
git branch # 브랜치 목록 조회
git branch 브랜치명 # 브랜치 생성
git branch -d 브랜치명 # 브랜치 삭제 (병합 후)
git switch 브랜치명 # 브랜치 이동
git switch -c 브랜치명 # 생성 + 이동 (자주 사용)
git switch - # 이전 브랜치로 복귀
git stash / git stash pop # 변경 사항 임시 저장/복원
| 브랜치 네이밍 패턴 | 용도 |
|---|---|
feature/기능명 | 새 기능 개발 |
fix/버그설명 | 일반 버그 수정 |
hotfix/긴급수정 | 프로덕션 긴급 수정 |
release/v버전 | 릴리즈 준비 |
다음 강인 8강 — merge에서는 분리된 브랜치를 다시 하나로 합치는 방법을 배웁니다. Fast-forward merge와 3-way merge의 차이, 그리고 merge commit이 생성되는 원리를 이해하면 협업 히스토리를 체계적으로 관리할 수 있게 됩니다!
관련 주제
- git branch
- git switch
- HEAD 포인터
- 브랜치 생성·삭제
- 작업 분리 전략
- 개발·프로그래밍
- 개발·프로그래밍 강의
- 깃허브 사용법 18강 — Git & GitHub 협업
- 무료강의
- 무료 온라인 강의
- NUGUNA
- 누구나
📚 시리즈 전체 공유
깃허브 사용법 18강 — Git & GitHub 협업
이 강의가 속한 시리즈는 총 7강, 모두 무료입니다. 처음부터 배우려는 동료에게 시리즈 전체를 알려 주세요.
댓글
불러오는 중...
