Project Management/Github
GitHub 브랜치 생성 및 관리 방법
브랜치 기본 개념
브랜치란?
- 독립적인 개발 라인: 메인 코드에 영향 없이 새로운 기능 개발
- 병렬 작업: 여러 개발자가 동시에 다른 기능 작업 가능
- 안전한 실험: 실패해도 메인 브랜치에 영향 없음
1. 브랜치 생성
로컬에서 브랜치 생성
# 새 브랜치 생성
git branch feature/새기능
# 브랜치 생성과 동시에 전환
git checkout -b feature/새기능
# 최신 Git (2.23+)
git switch -c feature/새기능
# 특정 커밋에서 브랜치 생성
git checkout -b hotfix/버그수정 abc1234
원격에서 브랜치 생성 (GitHub 웹)
1. GitHub 저장소 접속
2. 브랜치 드롭다운 클릭
3. 새 브랜치명 입력
4. "Create branch" 클릭
2. 브랜치 조회 및 전환
브랜치 목록 확인
# 로컬 브랜치 목록
git branch
# 원격 브랜치 포함 전체 목록
git branch -a
# 원격 브랜치만 조회
git branch -r
# 브랜치 상세 정보
git branch -v
브랜치 전환
# 기존 브랜치로 전환
git checkout main
git switch main # 최신 Git
# 원격 브랜치를 로컬로 가져와서 전환
git checkout -b feature/새기능 origin/feature/새기능
git switch -c feature/새기능 origin/feature/새기능
3. 브랜치 동기화
원격 저장소와 동기화
# 원격 저장소 정보 가져오기
git fetch origin
# 모든 원격 브랜치 정보 가져오기
git fetch --all
# 현재 브랜치를 원격과 동기화
git pull origin feature/새기능
# 로컬 브랜치를 원격에 푸시
git push origin feature/새기능
# 최초 푸시 (업스트림 설정)
git push -u origin feature/새기능
4. 브랜치 병합 (Merge)
기본 병합
# main 브랜치로 전환
git checkout main
# feature 브랜치 병합
git merge feature/새기능
# 병합 후 원격에 푸시
git push origin main
Fast-forward vs 3-way Merge
# Fast-forward 방지 (항상 merge commit 생성)
git merge --no-ff feature/새기능
# Squash 병합 (여러 커밋을 하나로 압축)
git merge --squash feature/새기능
git commit -m "새기능 추가"
5. Pull Request를 통한 병합
GitHub에서 PR 생성
1. GitHub 저장소 접속
2. "Pull requests" 탭
3. "New pull request" 클릭
4. 소스/타겟 브랜치 선택
5. 제목/설명 작성
6. "Create pull request" 클릭
PR 리뷰 및 병합
1. 코드 리뷰 진행
2. 승인 후 "Merge pull request"
3. 병합 옵션 선택:
- Create a merge commit
- Squash and merge
- Rebase and merge
6. 브랜치 삭제
로컬 브랜치 삭제
# 병합된 브랜치 삭제
git branch -d feature/새기능
# 강제 삭제 (병합되지 않은 브랜치)
git branch -D feature/새기능
# 원격 브랜치 삭제
git push origin --delete feature/새기능
정리 작업
# 원격에서 삭제된 브랜치 정보 로컬에서 제거
git remote prune origin
# 병합된 브랜치들 일괄 삭제
git branch --merged | grep -v "\*\|main\|develop" | xargs -n 1 git branch -d
7. 브랜치 전략
Git Flow
# 메인 브랜치
main # 프로덕션 배포용
develop # 개발 통합 브랜치
# 보조 브랜치
feature/ # 새 기능 개발
release/ # 배포 준비
hotfix/ # 긴급 수정
브랜치 명명 규칙
# 기능 개발
feature/기능명
feature/user-authentication
feature/payment-integration
# 버그 수정
bugfix/버그명
bugfix/login-error
bugfix/payment-validation
# 긴급 수정
hotfix/보안패치
hotfix/critical-security-fix
# 릴리즈
release/v1.2.0
release/2024-01-release
8. 실제 워크플로우 예시
새 기능 개발 프로세스
# 1. 최신 main 브랜치로 업데이트
git checkout main
git pull origin main
# 2. 새 기능 브랜치 생성
git checkout -b feature/user-profile
# 3. 개발 작업
# ... 코드 작성 ...
# 4. 변경사항 커밋
git add .
git commit -m "사용자 프로필 페이지 추가"
# 5. 원격에 푸시
git push -u origin feature/user-profile
# 6. GitHub에서 Pull Request 생성
# 7. 리뷰 완료 후 병합
# 8. 로컬 정리
git checkout main
git pull origin main
git branch -d feature/user-profile
핫픽스 프로세스
# 1. main에서 핫픽스 브랜치 생성
git checkout main
git checkout -b hotfix/security-patch
# 2. 수정 작업
# ... 버그 수정 ...
# 3. 커밋 및 푸시
git commit -m "보안 취약점 수정"
git push -u origin hotfix/security-patch
# 4. 긴급 PR 생성 및 병합
# 5. develop 브랜치에도 적용 (필요시)
git checkout develop
git merge hotfix/security-patch
git push origin develop
9. 유용한 브랜치 관리 명령어
브랜치 비교
# 브랜치 간 차이점 확인
git diff main..feature/새기능
# 커밋 로그 비교
git log main..feature/새기능
# 파일별 변경사항
git diff main..feature/새기능 -- filename.py
브랜치 리베이스
# feature 브랜치를 main 기준으로 리베이스
git checkout feature/새기능
git rebase main
# 인터랙티브 리베이스 (커밋 정리)
git rebase -i HEAD~3
브랜치 상태 확인
# 현재 브랜치와 상태
git status
# 브랜치별 마지막 커밋
git for-each-ref --format='%(refname:short) %(committerdate)' refs/heads
# 원격 브랜치 추적 상태
git branch -vv
10. 팀 협업 베스트 프랙티스
브랜치 관리 규칙
# 1. 브랜치명은 명확하고 일관성 있게
feature/JIRA-123-user-login
bugfix/fix-payment-error
# 2. 정기적으로 main과 동기화
git checkout feature/새기능
git rebase main # 또는 git merge main
# 3. 작은 단위로 자주 커밋
git commit -m "로그인 폼 UI 추가"
git commit -m "로그인 API 연동"
# 4. PR 설명을 상세히 작성
충돌 해결
# 병합 충돌 발생 시
git merge feature/새기능
# Auto-merging file.py
# CONFLICT (content): Merge conflict in file.py
# 충돌 파일 수정 후
git add file.py
git commit -m "충돌 해결"
댓글