main 브랜치는 항상 동작하는 안정된 코드가 있어야 하는 곳입니다. main에 직접 push하면 다음 문제가 생깁니다:
소규모 팀에 적합한 간단한 브랜치 전략입니다:
main (항상 안정된 상태)
│
├── feature/login ──── PR ──── merge → main
│
├── feature/signup ─── PR ──── merge → main
│
└── fix/typo ────────── PR ──── merge → main
feature/기능명 → 새 기능 개발
fix/버그명 → 버그 수정
refactor/대상 → 리팩토링
docs/문서명 → 문서 작업
예시:
feature/login-page
fix/header-overflow
docs/readme-update
브랜치 prefix는 작업의 의도를 기준으로 나누는 것을 추천합니다. 스타일 작업도 같은 원칙을 적용하면 됩니다.
feature/ (예: feature/login-page)fix/ (예: fix/header-overflow)refactor/ (예: refactor/button-styles)별도로 ui/ 같은 prefix를 만들기보다, 위 규칙으로 충분히 구분됩니다. 팀에서 정말 필요하다고 느낄 때만 추가하세요.
Pull Request(PR)는 "내 브랜치의 변경사항을 main 브랜치로 가져가(pull) 주세요"라는 요청입니다. 내가 main에 직접 넣는(push) 것이 아니라, main 쪽에서 내 코드를 가져가도록 요청하는 관점입니다.
# 1. main에서 새 브랜치 생성
git switch main # main 브랜치로 이동
git pull origin main # 원격 저장소의 최신 코드를 로컬에 가져옴
git switch -c feature/login-page # 새 브랜치를 만들면서 이동
# 2. 작업 후 커밋
git add .
git commit -m "로그인 페이지 UI 구현"
# 3. 원격에 push
git push origin feature/login-page # 원격 저장소에 내 브랜치를 push
push 후 GitHub 저장소 페이지에 가면 "Compare & pull request" 버튼이 표시됩니다. 클릭하여 PR을 생성합니다.
| 항목 | 설명 | 예시 |
|---|---|---|
| 제목 | 변경 사항을 한 줄로 요약 | 로그인 페이지 UI 구현 |
| 설명 | 무엇을, 왜 변경했는지 | 이메일/비밀번호 입력 폼과 제출 버튼 추가 |
| 리뷰어 | 코드를 확인할 팀원 지정 | 팀원 1-2명 |
PR이 생성되면 팀원이 코드를 리뷰합니다.
저장소에 설정된 조건(리뷰 Approve, 코멘트 resolve 등)이 모두 충족되면 PR 하단에 녹색 "Squash and merge" 버튼이 활성화됩니다. 이 버튼을 클릭하면 해당 브랜치의 변경사항이 main 브랜치에 합쳐집니다.
두 명이 같은 파일의 같은 부분을 수정하면 충돌이 발생합니다. 흔한 상황이니 걱정하지 않아도 됩니다.
# 1. main의 최신 변경사항을 가져온다
git switch main
git pull origin main
# 2. 내 브랜치로 돌아가서 main을 merge한다
git switch feature/login-page
# main의 변경사항을 내 브랜치에 합침 (merge)
# merge는 다른 브랜치의 변경사항을 현재 브랜치에 합치는 것입니다.
git merge main
충돌이 발생하면 Git이 해당 파일에 아래와 같은 표시를 추가합니다.
<<<<<<< HEAD
내 브랜치의 코드
=======
main 브랜치의 코드
>>>>>>> main
<<<<<<< HEAD ~ ======= - 내 브랜치에서 수정한 코드======= ~ >>>>>>> main - main 브랜치에서 수정된 코드
# 3. 충돌 파일을 열어 수동으로 해결
# <<<<<<< HEAD
# 내 코드
# =======
# main의 코드
# >>>>>>> main
# 4. 충돌 해결 후 커밋
git add .
git commit -m "main 브랜치 merge 충돌 해결"
# 5. push
git push origin feature/login-page
<<<<<<<, =======, >>>>>>>)를 모두 제거하고, 최종적으로 남길 코드만 남기면 됩니다. VS Code에서는 "현재 변경 사항 수락", "수신 변경 사항 수락", "두 변경 사항 모두 수락" 버튼으로 쉽게 해결할 수 있습니다.
정리 - 브랜치를 나눠 작업하고, PR로 코드 리뷰를 거쳐 merge하는 것이 팀 협업의 기본 워크플로우입니다. 충돌은 흔한 상황이며, 충돌 마커를 이해하면 쉽게 해결할 수 있습니다.
다음 세션에서는 지금까지 배운 내용을 종합한 팀 프로젝트 시작 체크리스트를 제공합니다.