브랜치가 필요한 이유
gitGraph
commit id: "초기 설정"
commit id: "기본 기능"
branch feature/login
checkout feature/login
commit id: "로그인 폼"
commit id: "로그인 검증"
checkout main
branch feature/signup
checkout feature/signup
commit id: "회원가입 폼"
checkout main
merge feature/login id: "로그인 병합"
merge feature/signup id: "회원가입 병합"
브랜치를 쓰면 기능 개발, 버그 수정, 실험을 메인 코드에 영향 없이 할 수 있습니다.
브랜치 기본 조작
# 브랜치 목록 확인
git branch
# * main
# feature/login
# 새 브랜치 만들기
git branch feature/login
# 브랜치 이동
git checkout feature/login
# 또는 (최신 방식)
git switch feature/login
# 만들면서 바로 이동
git checkout -b feature/login
git switch -c feature/login # 최신 방식
# 브랜치 삭제
git branch -d feature/login # 병합된 브랜치
git branch -D feature/login # 강제 삭제
머지: 브랜치 합치기
# main 브랜치에서
git switch main
# feature/login을 main에 병합
git merge feature/login
# 병합 완료 후 브랜치 정리
git branch -d feature/login
Fast-forward 머지
gitGraph
commit id: "A"
commit id: "B"
branch feature
checkout feature
commit id: "C"
commit id: "D"
checkout main
merge feature id: "Fast-forward"
main에 새 커밋이 없으면 포인터만 이동합니다 (Fast-forward).
3-way 머지
gitGraph
commit id: "A"
commit id: "B"
branch feature
checkout feature
commit id: "C"
checkout main
commit id: "D"
merge feature id: "Merge commit"
양쪽에 새 커밋이 있으면 새 머지 커밋이 생성됩니다.
충돌(Conflict) 해결
같은 파일의 같은 줄을 양쪽에서 수정하면 충돌이 발생합니다.
git merge feature/login
# CONFLICT (content): Merge conflict in index.html
# Automatic merge failed; fix conflicts and then commit the result.
충돌 파일을 열면:
<<<<<<< HEAD
<title>메인 제목</title>
=======
<title>로그인 페이지</title>
>>>>>>> feature/login
<<<<<<< HEAD~=======: 현재 브랜치(main)의 내용=======~>>>>>>>: 병합하려는 브랜치의 내용
원하는 내용으로 수정 후:
<title>로그인 페이지</title>
# 충돌 해결 후
git add index.html
git commit -m "merge: feature/login 병합, 타이틀 충돌 해결"
rebase: 깔끔한 이력 만들기
gitGraph
commit id: "A"
commit id: "B"
branch feature
checkout feature
commit id: "C (재배치)"
commit id: "D (재배치)"
checkout main
merge feature id: "Fast-forward"
# feature 브랜치에서
git switch feature/login
git rebase main
# 이후 main에서 fast-forward 머지
git switch main
git merge feature/login
rebase는 커밋을 재작성해 직선형 이력을 만듭니다. 공유 브랜치에서는 사용 주의.
브랜치 전략
main — 배포 가능한 안정 코드
develop — 개발 통합 브랜치
feature/xxx — 기능 개발
fix/xxx — 버그 수정
release/x.x — 릴리즈 준비
hotfix/xxx — 긴급 수정
정리
| 명령어 | 역할 |
|---|---|
git branch <name> | 브랜치 생성 |
git switch <name> | 브랜치 이동 |
git switch -c <name> | 생성+이동 |
git merge <branch> | 브랜치 병합 |
git rebase <branch> | 커밋 재배치 |
git branch -d <name> | 브랜치 삭제 |
다음 편에서는 GitHub 원격 저장소 — 코드를 원격에 올리고 팀원과 공유하는 방법을 배웁니다.