충돌이 발생했을 때
이런 메시지가 보이나요?
CONFLICT (content): Merge conflict in 파일명 Automatic merge failed; fix conflicts and then commit the result.
빠른 해결
# 1. 충돌 파일 확인
git status
# 2. 파일 열어서 충돌 마커 제거
# 3. 해결 완료 표시
git add 충돌파일
# 4. 커밋
git commit단계별 상세 가이드
1단계: 충돌 파일 확인
$ git status
On branch main
You have unmerged paths.
Unmerged paths:
(use "git add <file>..." to mark resolution)
both modified: app.js ← 충돌 파일2단계: 충돌 내용 확인
파일을 열면 이런 마커가 보입니다:
function calculate(a, b) {
<<<<<<< HEAD
// 내 코드
return a + b;
=======
// 상대방 코드
return a * b;
>>>>>>> feature/multiply
}| 마커 | 의미 |
|---|---|
<<<<<<< HEAD | 내 코드 시작 |
======= | 구분선 |
>>>>>>> branch | 상대방 코드 끝 |
3단계: 충돌 해결
원하는 코드만 남기고 마커 모두 제거:
// 방법 A: 내 코드만 유지
function calculate(a, b) {
return a + b;
}
// 방법 B: 상대방 코드만 유지
function calculate(a, b) {
return a * b;
}
// 방법 C: 둘 다 합치기
function calculate(a, b, op) {
return op === 'add' ? a + b : a * b;
}4단계: 해결 완료 표시
git add app.js5단계: 커밋
git commit
# 또는
git commit -m "Merge: 충돌 해결"에디터별 충돌 해결
VS Code
충돌 시 자동으로 버튼이 나타납니다:
- Accept Current Change: 내 코드 유지
- Accept Incoming Change: 상대방 코드 유지
- Accept Both Changes: 둘 다 유지
- Compare Changes: 비교 보기
명령줄로 해결
# 내 코드만 유지
git checkout --ours app.js
# 상대방 코드만 유지
git checkout --theirs app.js병합 취소하기
충돌이 너무 복잡하면 병합을 취소할 수 있습니다:
git merge --abort또는 pull 중이었다면:
git reset --hard HEADPull Request에서 충돌
방법 1: 로컬에서 해결
# 1. 최신 main 가져오기
git fetch origin
# 2. 내 브랜치에서 병합
git switch my-feature
git merge origin/main
# 3. 충돌 해결
# 4. push
git push방법 2: GitHub 웹에서 해결
- PR 페이지에서 “Resolve conflicts” 클릭
- 웹 에디터에서 마커 제거
- “Mark as resolved” 클릭
- “Commit merge” 클릭
자주 하는 실수
충돌 마커를 그대로 커밋
// ❌ 이러면 안 됨!
<<<<<<< HEAD
code...
=======확인 방법:
grep -r "<<<<<<" .
grep -r ">>>>>>" .add 없이 commit 시도
$ git commit
error: Committing is not possible because you have unmerged files.해결: git add 파일명 후 다시 시도
충돌 예방
- 자주 pull: 작업 전
git pull - 작은 PR: 변경사항을 작게 유지
- 빠른 병합: 브랜치를 오래 열어두지 않기
- 소통: 같은 파일 작업 시 팀원과 조율
관련 문서
- Conflict란 - 충돌의 원리
- 충돌 해결하기 - 상세 해결 가이드
- git merge - 병합 방법
- Pull Request란 - PR에서 충돌
더 알아보기
- git pull과 fetch - pull 시 충돌
- 실수 복구 시나리오 - 다양한 복구 방법