Part 2 0 / 9 챕터 완료
Chapter 06

브랜치 & Merge

브랜치로 독립적인 작업 공간을 만들고, Merge로 합치는 Git의 핵심 협업 기능을 배웁니다.

🎯 이 챕터를 마치면
  • 브랜치를 생성하고 전환할 수 있다
  • Fast-forward와 3-way Merge의 차이를 이해한다
  • Merge 충돌을 직접 해결할 수 있다
  • 실무 브랜치 네이밍 컨벤션을 안다

🌿 1. 브랜치란?

브랜치는 독립적인 작업 공간입니다. 메인 코드에 영향을 주지 않고 새 기능을 개발하거나 버그를 수정할 수 있습니다.

브랜치 없을 때 vs 있을 때
❌ 브랜치 없을 때
c1 초기 코드
c2 기능A + 버그수정 함께 커밋
c3 ⚠️ 문제 발생!
어떤 변경사항이 문제인지
구분이 안 됨
✅ 브랜치 활용
merge main feature/login
안전하게 독립 작업 후 합치기

주요 브랜치 명령어

Git Bash
# 브랜치 목록 확인 (* = 현재 브랜치)
$ git branch
* main
  feature/login

# 새 브랜치 생성
$ git branch feature/login

# 브랜치 전환
$ git switch feature/login

# 생성 + 전환 한 번에
$ git switch -c feature/login

# 브랜치 삭제 (merge 완료 후)
$ git branch -d feature/login

브랜치 네이밍 컨벤션

접두사 용도 예시
feature/ 새 기능 개발 feature/login, feature/dark-mode
fix/ 버그 수정 fix/login-error, fix/typo
hotfix/ 긴급 운영 수정 hotfix/critical-bug
docs/ 문서 작업 docs/api-guide

🔀 2. Merge — 브랜치 합치기

① Fast-forward Merge

두 브랜치 중 한쪽이 다른 쪽의 직계 후손일 때, 포인터만 이동하여 병합합니다.

Fast-forward Merge — 포인터만 이동
Merge 전
main feature
Merge 후
main + feature
Git Bash — Fast-forward Merge 실습
# feature/login 브랜치 생성 및 작업
$ git switch -c feature/login
$ touch login.html
$ git add .
$ git commit -m "feat: 로그인 페이지 추가"

# main으로 이동 후 merge
$ git switch main
$ git merge feature/login
Updating a3f82bc..c7d3e9f
Fast-forward
 login.html | 0
 1 file changed, 0 insertions(+), 0 deletions(-)

# merge 완료 → 브랜치 삭제
$ git branch -d feature/login

② 3-way Merge

두 브랜치가 각자 다른 커밋을 가지고 있을 때, 공통 조상을 기준으로 새 merge commit이 생성됩니다.

3-way Merge — 새 Merge 커밋 생성
공통 조상 main 작업 feature 작업 Merge Commit

③ Merge 충돌(Conflict) 해결

두 브랜치가 같은 파일의 같은 줄을 다르게 수정했을 때 충돌이 발생합니다.

Git Bash — 충돌 발생
$ git merge feature/login
Auto-merging index.html
CONFLICT (content): Merge conflict in index.html
Automatic merge failed; fix conflicts and then commit.
충돌 파일 내부 — 직접 수정해야 합니다
<<<<<<< HEAD
<h1>안녕하세요</h1> ← main 브랜치 내용
=======
<h1>Hello World</h1> ← feature 브랜치 내용
>>>>>>> feature/login
↓ <<<<, =====, >>>> 표시를 모두 제거하고 최종 내용만 남긴다
<h1>안녕하세요 Hello World</h1> ← 원하는 내용으로 수정
Git Bash — 충돌 해결 후
# 충돌 파일 수정 후 add + commit
$ git add index.html
$ git commit -m "merge: feature/login 충돌 해결 후 병합"
✅ 이해도 체크
브랜치를 생성하고 전환하는 명령어를 말할 수 있다
Fast-forward와 3-way Merge의 차이를 설명할 수 있다
충돌 파일에서 <<<<<<< ======= >>>>>>> 표시의 의미를 안다
실습에서 브랜치 생성 → 작업 → merge까지 직접 해봤다
📌 이 챕터 명령어
git branch
브랜치 목록 확인
git switch -c 브랜치명
브랜치 생성 + 전환
git switch 브랜치명
브랜치 전환
git merge 브랜치명
현재 브랜치에 다른 브랜치 병합
git branch -d 브랜치명
브랜치 삭제
🔨 실습 해보기
브랜치 만들고 Merge하기 + 충돌 직접 해결하기

이론에서 배운 Fast-forward와 3-way Merge, 충돌 실습을 한 번씩 직접 해보는 2가지 미션입니다.

0 / 7 완료
🎯 미션 A — Fast-forward Merge
1
프로젝트 준비 + main에 첫 커밋

브랜치 실습용 폴더를 만들고 첫 커밋을 만들어 둥니다.

Git Bash
$ mkdir branch-practice && cd branch-practice
$ git init && touch index.html
$ git add . && git commit -m "feat: index.html 추가"
2
feature 브랜치 만들고 커밋

이론의 SVG처럼, main에서 분기해 독립적으로 커밋합니다.

Git Bash
$ git switch -c feature/about
$ touch about.html
$ git add . && git commit -m "feat: about 페이지 추가"
브랜치 분기 상태
main
◆ index.html 커밋
분기점
feature/about
◆ index.html
◆ about.html (뉴)
3
main으로 돌아가 Fast-forward Merge

main에 없던 about.html이 생깁니다! 이론의 "포인터만 이동" SVG를 참고하세요.

Git Bash
$ git switch main
$ ls
index.html  ← about.html 없음!
$ git merge feature/about
Fast-forward
 about.html | 0
 1 file changed
$ ls
about.html  index.html  ← 넡!
$ git branch -d feature/about
🗿 미션 B — 충돌 만들고 해결하기
4
main에서 첫 변경 + 커밋

충돌 조건 만들기: main에서 index.html을 먼저 수정합니다.

Git Bash
$ echo "<h1>안녕하세요</h1>" > index.html
$ git add . && git commit -m "fix: 헤더 한국어로"
5
feature 브랜치에서 같은 줄 다르게 수정 + 커밋

이론의 3-way Merge 조건입니다! 같은 파일의 같은 줄을 서로 다르게 수정하는 상황을 만들거니다.

Git Bash
$ git switch -c feature/header
$ echo "<h1>Hello World</h1>" > index.html
$ git add . && git commit -m "feat: 헤더 영어로"
6
Merge → CONFLICT 확인!

main으로 돌아가 merge하면 충돌이 납니다. 이론의 <<<<<<< / ======= / >>>>>>> 마커를 눈으로 확인하세요!

Git Bash
$ git switch main
$ git merge feature/header
CONFLICT (content): Merge conflict in index.html
Automatic merge failed; fix conflicts and then commit.
$ cat index.html
<<<<<<< HEAD
<h1>안녕하세요</h1>
=======
<h1>Hello World</h1>
>>>>>>> feature/header
⚠️

이론의 충돌 파일 다이어그램과 동일한 상황입니다! <<<,===,>>> 표시를 모두 제거하고 원하는 내용만 남기세요.

7
충돌 파일 수정 → add → commit

충돌 마커를 제거하고 원하는 내용만 남기세요. 그리고 add + commit으로 충돌 해결 커밋을 만들어독니다.

Git Bash
# index.html을 에디터로 열어 충돌 마커 제거 및 저장
$ git add index.html
$ git commit -m "merge: feature/header 충돌 해결"
$ git log --oneline --graph
*   9f8e3d1 merge: feature/header 충돌 해결
|\  
| * 7b3c1d0 feat: 헤더 영어로
* | 2f4a8e9 fix: 헤더 한국어로
|/  
* a3f82bc feat: index.html 추가
🧪 이런 상황, 어떻게 할까요?
😰git switch feature 했는데 "Your local changes would be overwritten" 오류가 나요

동일 파일에 변경사항이 있고, 두 브랜치가 서로 다른 버전을 가지고 있는 경우입니다.

커밋하거나 git stash로 임시 저장 후 전환하세요.

😕실수로 main에 직접 커밋합니다!

main에서 브랜치 없이 커밋한 상황입니다.

git reset --soft HEAD~1로 커밋을 취소하고, 새 브랜치를 만들어서 다시 커밋하세요.

😱브랜치 이름을 잠못 지었어요

브랜치 이름은 나중에 바꿀 수 있습니다.

git branch -m 앞이름 새이름으로 변경하세요.

💡merge 전에 차이를 미리 보고 싶어요

merge 전 diff 확인이 가능합니다.

git diff main feature/xxx로 두 브랜치의 차이를 미리 확인할 수 있습니다.

🎉 모든 Step 완료! Fast-forward Merge와 충돌 해결을 직접 해봤습니다.