← 홈페이지 5강 목록으로
🔀
EPISODE 02
충돌 마커 · 수동 해결 · rebase vs merge

충돌 해결 (Merge Conflict)

Merge conflict 발생 원리(같은 파일 같은 위치 다른 수정), 충돌 마커 읽기, 5단계 해결 절차, 그리고 rebase와 merge의 차이를 익힙니다.

Gitconflictrebase
소요 시간
45분
난이도
📊 중급
선수 조건
🎯 git-coop-01
결과물
충돌이 나도 당황하지 않고 해결

이 강의에서 배우는 것

  • 1충돌이 나는 조건(같은 파일, 같은 위치, 다른 수정)을 안다
  • 2<<<<<<< / ======= / >>>>>>> 마커를 읽는다
  • 3충돌 해결 5단계를 따른다
  • 4rebase와 merge의 차이와 공유 브랜치 rebase 금지 원칙을 안다

1. 충돌 발생 원인

text
공통 조상(A):
  button { color: blue; }

main(B):                     feature(C):
  button { color: red; }       button { color: green; }

→ Git이 판단 불가 → 충돌!
  • 다른 파일 수정 → 자동 병합
  • 같은 파일, 다른 위치 → 자동 병합
  • 같은 파일, 같은 위치 다르게 수정 → 충돌

2. 충돌 마커

text
<<<<<<< HEAD          ← 현재 브랜치 시작
button { color: red; }
=======               ← 구분선
button { color: green; }
>>>>>>> feature/login  ← 병합하려는 브랜치

3. 해결 절차

bash
# 1. 충돌 발생 확인
git merge feature/login
# CONFLICT (content): Merge conflict in style.css

# 2. 어떤 파일이 충돌
git status
# both modified: style.css

# 3. 파일 열어서 마커 제거 + 원하는 내용으로 편집

# 4. 스테이징
git add style.css

# 5. 병합 커밋
git commit

# 중간에 병합을 취소
git merge --abort

4. rebase vs merge

merge — 병합 커밋으로

text
Before:  A---B---C (main)
               \
                D---E (feature)

After (merge):
         A---B---C---M (main, M: 병합 커밋)
               \   /
                D-E

rebase — 선형 히스토리

text
Before:  A---B---C (main)
               \
                D---E (feature)

After (rebase feature onto main):
         A---B---C---D'---E' (feature)
bash
git switch feature/login
git rebase main           # main 위에 feature 커밋들을 재적용

git switch main
git merge feature/login   # 이제 Fast-forward!
⚠️

rebase는 혼자 사용하는 로컬 브랜치에만! 팀원과 공유된 브랜치를 rebase하면 다른 팀원의 히스토리가 엉킵니다.

5. 그래프로 시각화

bash
git log --oneline --graph --all

# *   abc1234 (HEAD -> main) Merge branch 'feature/login'
# |\
# | * def5678 (feature/login) feat: 로그인 검증 추가
# | * ghi9012 feat: 로그인 페이지 추가
# * | jkl3456 feat: 소개 페이지 추가
# |/
# * mno7890 init
예제 코드 / 강의 자료

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

GitHub에서 보기 ↗