테마
브랜치 전략
브랜치(Branch)란?
브랜치는 독립적인 작업 공간을 의미합니다. 기존 코드를 유지한 채 새로운 기능을 개발하고 싶을 때, 나뭇가지처럼 갈라져 나오는 별도의 작업 공간을 만드는 것입니다.
비유: 다이나믹 듀오의 웹사이트 개발
- 개코:
login브랜치에서 로그인 페이지 개발 - 최자:
board브랜치에서 자유게시판 개발 - 각자 독립적으로 작업한 뒤, 완료되면
main에 합치기
핵심: 개코가 로그인 브랜치에서 작업해도 최자의 board 브랜치는 전혀 영향받지 않습니다.
브랜치 기본 명령어
브랜치 생성
bash
# 브랜치 생성 (이동하지 않음)
git branch login
# 브랜치 생성 + 이동 (현재 권장)
git switch -c board
# 브랜치 생성 + 이동 (오래전부터 널리 쓰인 방식)
git checkout -b board브랜치 이동 (switch / checkout)
bash
# login 브랜치로 이동
git switch login
# main 브랜치로 돌아가기
git switch main
# 예전 방식도 여전히 동작함
git checkout login
git checkout main최신 Git 명령어
최근 Git은 브랜치 전환을 git switch, 파일 복원이나 스테이징 취소를 git restore로 나누어 안내하는 경우가 많다. 기존 문서나 실무 예시에는 git checkout이 여전히 자주 등장하므로, 두 표현을 모두 읽을 수 있어야 한다.
브랜치 목록 확인
bash
git branch
# * main ← 현재 위치
# login
# boardHEAD와 브랜치 전환
| 개념 | 설명 |
|---|---|
| HEAD | 현재 작업 중인 브랜치(또는 커밋)를 가리키는 포인터 |
| switch / checkout | HEAD를 다른 브랜치로 이동시키는 명령어 |
브랜치 이동 시 파일 변화
switch 또는 checkout으로 브랜치를 이동하면, 워킹 디렉토리의 파일이 해당 브랜치의 상태로 바뀝니다. login 브랜치에서 만든 login.txt는 main으로 돌아오면 사라지지만, 다시 login으로 이동하면 파일이 그대로 있습니다.
원격 브랜치 push
로컬에서 만든 브랜치를 원격에 올리려면 업스트림 설정이 필요합니다:
bash
# 최초 push 시 원격 브랜치 생성 및 연결
git push --set-upstream origin login
# 또는 줄여서
git push -u origin login
# 이후부터는 간단하게
git push병합(Merge) 전략
브랜치에서 작업이 완료되면 main에 합치는(병합하는) 과정이 필요합니다. 병합에는 세 가지 전략이 있습니다.
1. Fast-forward 병합
조건: 부모 브랜치(main)가 분기 이후 변경되지 않았을 때
main이 C2에서 변하지 않았으므로, main 포인터를 login의 최신 커밋으로 이동시키기만 하면 됩니다:
bash
# main에서 login 병합
git checkout main
git merge login
# Fast-forward 발생 → 별도 커밋 없이 포인터 이동2. Merge Commit (3-way 병합)
조건: 부모 브랜치(main)도 분기 이후 변경되었을 때
main이 이미 변경되었으므로, 두 브랜치의 내용을 합친 새로운 병합 커밋이 생성됩니다.
bash
git checkout main
git merge board
# Merge commit 생성 → 양쪽 변경사항 통합3. Rebase
base(시작점)를 재설정하여 커밋 히스토리를 직선으로 만드는 방법입니다.
bash
# board 브랜치에서 rebase 실행
git checkout board
git rebase main
# main으로 돌아가서 fast-forward merge
git checkout main
git merge board
# Fast-forward 발생!Rebase의 효과: board 브랜치의 시작점을 main의 최신 커밋으로 옮김으로써, 이후 Fast-forward 병합이 가능해집니다.
세 가지 병합 전략 비교
| 전략 | Merge Commit | Fast-forward | Rebase |
|---|---|---|---|
| 커밋 이력 | 분기 이력 보존 | 직선으로 깔끔 | 직선으로 재정렬 |
| 별도 커밋 | 병합 커밋 생성 | 없음 | 없음 (이후 FF) |
| 장점 | 협업 이력 명확 | 깔끔한 이력 | 깔끔한 이력 |
| 단점 | 커밋이 많아짐 | 제한된 상황 | 충돌 해결 필요 가능 |
팀 컨벤션에 따라 선택
어떤 병합 전략을 사용할지는 **팀의 컨벤션(약속)**에 따라 다릅니다. "무조건 merge commit을 남긴다", "rebase만 쓴다" 등 팀마다 규칙이 다릅니다. 장단점을 이해하고 상황에 맞게 선택하세요.