Conflict란
한 줄 요약
두 브랜치에서 같은 파일의 같은 부분을 다르게 수정했을 때 발생하는 충돌
개요
Conflict(충돌)는 Git이 자동으로 병합할 수 없는 상황입니다. 같은 코드를 다르게 수정했을 때 발생하며, 사람이 직접 어떤 코드를 유지할지 결정해야 합니다.
핵심 포인트
- 충돌은 자연스러운 현상 (두려워하지 마세요!)
- Git은 충돌을 표시해주고, 해결은 사람이 함
- 같은 파일의 같은 부분을 수정해야 충돌 발생
충돌이 발생하는 경우
예시 상황
원본 (c2):
line 1
line 2
line 3
│
├────────────────┐
│ │
▼ ▼
A 브랜치: B 브랜치:
line 1 line 1
line 2 수정A line 2 수정B ← 같은 줄을 다르게 수정!
line 3 line 3
두 브랜치를 병합하면 → 충돌 발생!
충돌이 발생하지 않는 경우
다른 파일 수정
A 브랜치: app.js 수정
B 브랜치: utils.js 수정
→ 충돌 없음 ✅
같은 파일, 다른 부분 수정
A 브랜치: app.js 1-10줄 수정
B 브랜치: app.js 50-60줄 수정
→ 충돌 없음 (자동 병합) ✅
같은 내용으로 수정
A 브랜치: line 2 → "hello"
B 브랜치: line 2 → "hello" (동일)
→ 충돌 없음 ✅
충돌 시 Git의 표시
충돌이 발생하면 Git이 파일에 마커를 추가합니다:
function login() {
<<<<<<< HEAD
// 내 브랜치의 코드
return authenticate(user, password);
=======
// 병합하려는 브랜치의 코드
return validateAndAuthenticate(user, password);
>>>>>>> feature/auth
}마커 설명
| 마커 | 의미 |
|---|---|
<<<<<<< HEAD | 내 브랜치(현재) 코드 시작 |
======= | 구분선 |
>>>>>>> branch-name | 병합할 브랜치 코드 끝 |
충돌이 발생하는 상황
1. git merge
$ git merge feature
Auto-merging app.js
CONFLICT (content): Merge conflict in app.js
Automatic merge failed; fix conflicts and then commit the result.2. git pull
$ git pull origin main
Auto-merging app.js
CONFLICT (content): Merge conflict in app.js
Automatic merge failed; fix conflicts and then commit the result.3. git rebase
$ git rebase main
Auto-merging app.js
CONFLICT (content): Merge conflict in app.js
error: could not apply a1b2c3d4. Pull Request (GitHub)
┌─────────────────────────────────────────────────────────────────┐
│ ⚠️ This branch has conflicts that must be resolved │
│ │
│ Conflicting files: │
│ • src/app.js │
│ │
│ [Resolve conflicts] [Use command line] │
└─────────────────────────────────────────────────────────────────┘
충돌 예방 방법
1. 자주 동기화
# 작업 전 최신 상태로
git pull origin main
# 작업 중에도 주기적으로
git fetch origin
git merge origin/main2. 작은 단위로 작업
- 하나의 기능 = 하나의 PR
- 오래 열린 브랜치 피하기
3. 팀원과 소통
- 같은 파일 작업 시 미리 알리기
- 코드 영역 분담
4. 브랜치 수명 최소화
# 브랜치 생성
git switch -c feature
# 빠르게 작업 완료
# 빠르게 병합
git switch main
git merge feature충돌 vs 에러
| 충돌 (Conflict) | 에러 (Error) |
|---|---|
| 정상적인 상황 | 문제 상황 |
| 코드가 겹침 | 명령어/권한 문제 |
| 수동 해결 필요 | 원인 파악 필요 |
CONFLICT 메시지 | error, fatal 메시지 |
자주 하는 실수
충돌 마커를 그대로 커밋
// ❌ 이렇게 커밋하면 안 됨!
<<<<<<< HEAD
return a;
=======
return b;
>>>>>>> feature해결: 마커를 모두 제거하고 원하는 코드만 남기세요.
충돌 해결 없이 작업 계속
$ git status
You have unmerged paths.해결: 먼저 충돌을 해결하세요.
# 충돌 파일 확인
git status
# 해결 후
git add 충돌해결한파일
git commit관련 명령어
- git merge - 병합 및 충돌 발생
- git status - 충돌 상태 확인
- git diff - 충돌 내용 비교
더 알아보기
- 충돌 해결하기 - 충돌 해결 상세 가이드
- git merge - 병합 방법
- Pull Request란 - PR에서 충돌 해결