Branch란
한 줄 요약
독립적인 작업 공간을 만들어 여러 기능을 동시에 개발할 수 있게 해주는 기능
개요
Branch(브랜치)는 Commit 히스토리에서 분기하여 독립적인 작업 공간을 만드는 것입니다. 마치 평행 우주처럼 각 브랜치에서 다른 작업을 진행할 수 있습니다.
핵심 포인트
- 브랜치는 특정 커밋을 가리키는 포인터
- 새 커밋을 만들면 현재 브랜치가 자동으로 이동
- 브랜치 생성/전환이 매우 빠름 (포인터만 바꾸면 되므로)
- 여러 기능을 동시에 개발할 때 필수
시각적 이해
브랜치 없이 작업
[c1]───▶[c2]───▶[c3]───▶[c4] ← 모든 작업이 한 줄
새 기능 개발 중 긴급 버그를 수정해야 한다면? 섞이게 됩니다.
브랜치로 작업
main
│
▼
[c1]───▶[c2]───▶[c3]───▶[c4]
│
└───▶[c5]───▶[c6]
▲
│
feature
main: 안정적인 코드 유지feature: 새 기능 개발 중- 각각 독립적으로 작업 가능!
왜 브랜치가 필요한가?
실제 시나리오
-
기능 개발 중 긴급 버그 발생
- 브랜치 없이: 개발 중인 코드와 버그 수정이 섞임
- 브랜치 사용:
main으로 돌아가서 버그만 수정
-
여러 기능 동시 개발
- 각 기능을 별도 브랜치에서 개발
- 완성된 기능만
main에 합침
-
실험적인 시도
- 새 브랜치에서 실험
- 실패하면 브랜치 삭제, 성공하면 병합
브랜치의 가벼움
Git 브랜치는 매우 가볍습니다.
- 브랜치 = 40바이트 파일 (커밋 해시 저장)
- 생성/삭제/전환이 거의 즉각적
- 파일을 복사하지 않음!
# 브랜치 생성: 0.001초
git branch feature
# 브랜치 전환: 0.01초
git switch feature브랜치 종류 (관례)
| 브랜치 | 용도 |
|---|---|
main / master | 배포 가능한 안정 버전 |
develop | 개발 중인 다음 버전 |
feature/* | 새 기능 개발 |
bugfix/* / hotfix/* | 버그 수정 |
release/* | 릴리즈 준비 |
예시
main
├── develop
│ ├── feature/login
│ ├── feature/signup
│ └── feature/dashboard
├── hotfix/security-patch
└── release/v1.2.0
기본 워크플로우
# 1. 새 기능 브랜치 생성
git switch -c feature/login
# 2. 작업 및 커밋
git add .
git commit -m "feat: 로그인 폼 추가"
# 3. 더 많은 작업...
git commit -m "feat: 로그인 API 연동"
# 4. main에 병합
git switch main
git merge feature/login
# 5. 브랜치 삭제
git branch -d feature/login브랜치 관련 명령어
| 명령어 | 설명 | 참고 |
|---|---|---|
git branch | 브랜치 목록/생성 | git branch |
git switch | 브랜치 전환 | git checkout과 switch |
git merge | 브랜치 병합 | git merge |
git branch -d | 브랜치 삭제 | git branch |
자주 하는 실수
변경사항을 커밋하지 않고 브랜치 전환
증상: 변경사항이 다른 브랜치로 따라옴
해결: 전환 전 커밋하거나 stash
git stash # 임시 저장
git switch main
git stash pop # 복원잘못된 브랜치에서 작업
→ 잘못된 브랜치에서 작업했을 때 참고
관련 명령어
- git branch - 브랜치 생성/삭제/목록
- git checkout과 switch - 브랜치 전환
- git merge - 브랜치 병합