Github Branch 관리

1. Git & GitHub 협업 핵심 개념

1.1 Git vs GitHub

항목GitGitHub
역할로컬에서 코드의 버전을 관리하는 도구Git 저장소를 온라인에서 관리하고 공유
특징분산형 버전 관리중앙 저장소 제공, PR, Issue, Wiki 기능 제공

1.2 브랜치란?

  • 브랜치: 기존 코드 흐름에서 독립적으로 작업할 수 있도록 만든 새로운 경로
    • 실험, 기능 추가, 수정 작업 등을 안전하게 할 수 있음
    • 다른 팀원에게 영향 없이 개발 가능

1.2.1 예시 명령어

git branch feature/login       # 브랜치 생성
git checkout feature/login     # 브랜치 전환
git checkout -b feature/login  # 생성 + 전환

2. 팀 협업을 위한 브랜치 전략

2.1 브랜치 전략이 필요한 이유

  • 여러 명이 동시에 작업하면 충돌 가능성 높음
  • 작업 분리 없이 하나의 브랜치에서만 작업하면 혼란 + 코드 꼬임
  • 전략을 도입하면 업무 분담, 병합, 릴리즈 시점 관리가 쉬워짐

2.2 단순화된 Git Flow 전략

main       ← 배포용 안정된 브랜치
│
├── develop ← 기능 브랜치를 병합하는 테스트 브랜치
│   ├── feature/login
│   ├── feature/signup
│   └── bugfix/error-popup

2.3 브랜치별 용도 설명

브랜치 종류용도 설명
main최종 배포 브랜치. CI/CD 배포 연결 가능
develop전체 기능 통합 브랜치. 항상 최신 개발 코드 유지
feature/*새로운 기능 개발용 브랜치 (예: 로그인, 게시글 추가 등)
bugfix/*버그 수정용 브랜치
hotfix/*급하게 수정해서 배포해야 할 치명적 오류용 브랜치

3. 실습: 팀 협업 브랜치 실습 프로젝트

3.1 프로젝트 초기화

git clone https://github.com/your-team/project.git
cd project
git checkout -b develop origin/develop
  • 저장소를 클론 후 develop 브랜치로 이동
  • develop 브랜치는 기능 개발 브랜치들의 부모 브랜치 역할

3.2 실습 1: 기능 브랜치 생성 및 작업

시나리오:
로그인 기능 개발을 위해 feature/login 브랜치 생성 후 커밋

git checkout -b feature/login develop  # 브랜치 생성 및 이동

# 코드 작성
echo "console.log('Login feature');" > login.js

# Git에 추가 후 커밋
git add login.js
git commit -m "✨ Add login feature"

# 원격 저장소에 푸시
git push -u origin feature/login
  • 브랜치는 항상 develop에서 파생하도록 함
  • 는 커밋 이모지 예시로, 커밋 메시지 규칙 도입 시 사용 가능함

3.3 실습 2: Pull Request (PR) 생성 및 병합

  1. GitHub 웹에서 feature/logindevelop PR 생성
  2. 팀원이 리뷰 후 Approve
  3. 병합(Merge) 후 feature/login 브랜치 삭제
git branch -d feature/login                  # 로컬 브랜치 삭제
git push origin --delete feature/login      # 원격 브랜치 삭제
  • PR은 코드 리뷰 및 변경 이력 확인에 필수
  • 팀마다 병합 방식(Merge, Squash, Rebase 등) 결정

3.4 실습 3: 충돌 해결 실습

  • 시나리오
    • 두 개의 브랜치에서 같은 파일 main.js를 수정하여 충돌 발생
# feature/signup 브랜치에서 main.js 수정
git checkout -b feature/signup develop
echo "console.log('Signup feature');" > main.js
git add .
git commit -m "signup 기능 추가"
git push origin feature/signup

# feature/login 브랜치에서 동일 파일 수정
git checkout feature/login
echo "console.log('Login feature');" > main.js
git add .
git commit -m "login 기능 추가"

# feature/login에서 signup 브랜치 병합 시도
git merge feature/signup
  • 충돌 발생 시 Git이 알려줌
  • 직접 파일 열어 충돌 부분 수정
  • 수정 후 다음 명령어 실행:
git add main.js
git commit -m "🛠️ merge conflict 해결"

4. 팀 브랜치 네이밍 규칙 제안

유형형식 예시설명
기능feature/login기능 추가
버그 수정bugfix/modal-close버그 수정
핫픽스hotfix/payment-error배포 후 긴급 수정 사항
실험용experiment/ai-test실험성 개발, POC 등
  • 네이밍은 일관성이 가장 중요
  • Jira, Notion과 연결되면 feature/JIRA-1234-login처럼 확장 가능

5. GitHub Flow 전략 (간단 버전)

5.1 특징

  • develop 없이 main에 직접 기능 브랜치를 병합
  • 배포 자동화가 잘 된 경우 사용
  • 스타트업/소규모 프로젝트에 적합
main
├── feature/header → PR → main

5.2 차이점

항목Git FlowGitHub Flow
브랜치 구조main + develop + 기타main + 기능 브랜치
복잡성다소 복잡간단
추천 상황대규모 협업/기업 팀개인/소규모 팀

6. 보너스 실습: 커밋 시각화 보기

git log --oneline --graph --all --decorate
  • 브랜치 병합 히스토리를 트리 형태로 보여줌
  • 협업 시 브랜치 병합 흐름을 시각적으로 파악 가능

7. 실습 체크리스트

실습 항목설명확인 여부
브랜치 생성 및 전환기능 브랜치 만들고 이동
커밋 및 푸시변경 사항 저장소에 업로드
PR 생성 및 코드 리뷰팀원 간 리뷰로 품질 향상
충돌 발생 및 해결충돌이 발생한 파일 수동 수정
병합 완료 후 브랜치 삭제정리 단계

8. 마무리 및 Q&A

8.1 핵심 정리

  • Branch 전략은 협업의 질을 좌우함
  • 기능/버그 브랜치를 잘 나누고 PR 리뷰를 적극 활용
  • 충돌 해결 능력도 실무에 중요한 협업 역량
항목요약 설명
브랜치 전략개발 흐름 정리의 기준점
기능 브랜치독립적 개발 및 병합 간소화
GitHub Flow간단한 프로젝트에 적합
Git Flow조직적이고 규모 있는 협업에 적합

부록: Git 명령어 요약

작업 항목명령어
브랜치 목록 확인git branch
브랜치 생성 및 이동git checkout -b 브랜치명
브랜치 병합git merge 브랜치명
브랜치 삭제git branch -d 브랜치명
원격 브랜치 삭제git push origin --delete 브랜치명
충돌 확인git status
충돌 해결 후 커밋git add .git commit -m "resolve conflict"