← 홈페이지 5강 목록으로
🌳
EPISODE 01
branch · switch · HEAD · merge · GitHub Flow

브랜치 전략

독립적인 작업 흐름을 만드는 브랜치, switch/checkout, HEAD 포인터, Fast-forward와 3-way merge의 차이, 그리고 단순한 GitHub Flow 워크플로를 익힙니다.

GitbranchmergeGitHub Flow
소요 시간
45분
난이도
📊 중급
선수 조건
🎯 react-08
결과물
feature 브랜치 → PR → merge → 삭제 사이클 체화

이 강의에서 배우는 것

  • 1브랜치의 개념과 사용 이유를 설명한다
  • 2switch -c / branch -d 같은 핵심 명령어를 사용한다
  • 3Fast-forward와 3-way merge의 차이를 안다
  • 4GitHub Flow의 규칙(main 항상 배포 가능)을 안다

1. 브랜치란

text
main:    A --- B --- C
                      \
feature/login:         D --- E

feature/login 에서 D, E를 만들어도 main은 C에 그대로 있습니다.

2. 핵심 명령어

bash
git branch                    # 현재 브랜치 목록
git branch -a                 # 원격 포함

git branch feature/login      # 새 브랜치 생성
git switch feature/login      # 이동 (Git 2.23+)
git switch -c feature/login   # 생성 + 이동

# 구버전
git checkout feature/login
git checkout -b feature/login

git branch -d feature/login   # 병합된 것만 삭제
git branch -D feature/login   # 강제 삭제

3. HEAD

bash
cat .git/HEAD
# ref: refs/heads/main

git switch feature/login
cat .git/HEAD
# ref: refs/heads/feature/login

4. Fast-forward Merge

text
병합 전:
main:      A --- B
                  \
feature:           C --- D

병합 후 (FF — 단순히 포인터 이동):
main:      A --- B --- C --- D
bash
git switch main
git merge feature/login
git branch -d feature/login

5. 3-way Merge

text
병합 전:
main:    A --- B --- C
                \
feature:         D --- E

병합 후 (병합 커밋 M 생성):
main:    A --- B --- C ------- M
                \           /
feature:         D --- E ---

6. Feature 브랜치 워크플로

bash
git switch main
git switch -c feature/login

# 작업 + 커밋
git add login.js
git commit -m "feat: 로그인 기능 추가"

# main에 병합
git switch main
git merge feature/login
git branch -d feature/login

7. GitHub Flow

text
main (항상 배포 가능)
  ↓ switch -c
feature/기능명
  ↓ 작업 + 커밋 + push
  ↓ Pull Request
  ↓ 코드 리뷰
  ↓ merge → main
  ↓ 배포
  • main은 항상 배포 가능한 상태를 유지
  • 새 작업은 무조건 브랜치에서
  • 코드 리뷰(PR)를 거쳐야만 main에 병합
bash
git log --oneline --graph --all
예제 코드 / 강의 자료

전체 강의 자료와 예제 코드는 GitHub에서 자유롭게 받아볼 수 있습니다.

GitHub에서 보기 ↗