🔀
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 --abort4. rebase vs merge
merge — 병합 커밋으로
text
Before: A---B---C (main)
\
D---E (feature)
After (merge):
A---B---C---M (main, M: 병합 커밋)
\ /
D-Erebase — 선형 히스토리
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