앞선 글에서는 Git과 GitHub의 기초적인 사용법을 다뤘습니다. 이번에는 협업에 필수적인 브랜치(branch), 충돌(conflict) 해결, 그리고 GitHub Pull Request(PR) 사용법을 실전 예제와 함께 알아봅니다.
✅ 브랜치(branch)란?
브랜치는 코드의 독립적인 작업 공간입니다.main
브랜치를 그대로 건드리지 않고, 새 브랜치를 만들어 기능을 개발한 뒤, 나중에 합치는 방식으로 안전하게 작업할 수 있어요.
📌 브랜치 주요 용도
이름 | 용도 |
---|---|
main | 배포용 코드, 안정된 버전 |
feature/기능명 | 새로운 기능 개발 |
fix/버그명 | 버그 수정 |
hotfix/긴급명 | 긴급 패치 |
dev/test | 실험적인 개발 공간 |
🛠️ 브랜치 실습
# 브랜치 생성
git checkout -b feature/login
# 브랜치 목록 보기
git branch
# 작업 후 커밋
git add .
git commit -m "로그인 기능 구현"
# main 브랜치로 돌아가기
git checkout main
# feature/login 브랜치 병합
git merge feature/login
# 병합 후 브랜치 삭제
git branch -d feature/login
⚠️ 충돌(conflict)이란?
두 브랜치에서 같은 파일의 같은 줄을 서로 다르게 수정하면 Git은 어떤 내용을 살릴지 알 수 없어서 **충돌(conflict)**이 발생합니다.
🔥 충돌 예시 상황
main
에서README.md
수정 → 커밋feature
브랜치에서도 같은 줄을 수정 → 커밋main
으로 돌아와feature
를 병합
git merge feature
⚠️ 충돌 메시지
Auto-merging README.md
CONFLICT (content): Merge conflict in README.md
Automatic merge failed; fix conflicts and then commit the result.
🧹 충돌 해결 방법
- 파일 열기 (
README.md
) - 아래와 같은 표시가 나타남:
<<<<<<< HEAD
main에서 수정한 내용
=======
feature 브랜치에서 수정한 내용
>>>>>>> feature
- 둘 중 하나를 선택하거나, 적절히 병합
- 저장 후 커밋
git add README.md
git commit -m "충돌 해결"
🤝 협업 시 Pull Request(PR) 사용하는 방법
GitHub에서는 여러 개발자가 협업할 때 Pull Request (PR) 를 통해 코드 변경 사항을 리뷰하고 병합합니다.
📋 PR 흐름
- GitHub에서
main
외의 브랜치를 만들고 푸시 - GitHub 웹사이트에서 “New Pull Request” 클릭
- 리뷰 요청 → 리뷰 후 승인 → 병합
🛠️ 실습 예시
# 새 브랜치에서 기능 개발
git checkout -b feature/profile
git add .
git commit -m "프로필 페이지 추가"
git push origin feature/profile
- GitHub 접속 →
feature/profile
브랜치 선택 Compare & pull request
버튼 클릭- 변경 사항 설명 작성
- 팀원이 리뷰하고 승인 후 Merge
✅ PR 병합 방식 (선택 가능)
방식 | 설명 |
---|---|
Merge | 일반 병합, 커밋 히스토리 보존 |
Squash and merge | 커밋들을 하나로 압축해서 병합 |
Rebase and merge | main 브랜치에 깔끔하게 붙이기 (커밋 정리용) |
📌 요약
개념 | 핵심 내용 |
---|---|
브랜치 | 기능별로 독립된 작업 공간 |
충돌 | 같은 파일의 같은 줄을 다르게 수정할 때 발생 |
PR | 코드 리뷰 → 승인 → 병합하는 GitHub 협업 방식 |
✍️ 마무리
브랜치를 나눠서 작업하고, 충돌을 해결하고, Pull Request로 협업하는 것은 현대 소프트웨어 개발에서 기본이자 필수입니다. 익숙해지면 팀과의 협업 속도와 코드 품질 모두 올라갑니다.
다음 글에서는 GitHub Actions, CI/CD, 코드 리뷰 팁, 그리고 Git Flow 전략에 대해 다뤄보겠습니다.