충돌이 발생했을 때

이런 메시지가 보이나요?

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.js

5단계: 커밋

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 HEAD

Pull Request에서 충돌

방법 1: 로컬에서 해결

# 1. 최신 main 가져오기
git fetch origin
 
# 2. 내 브랜치에서 병합
git switch my-feature
git merge origin/main
 
# 3. 충돌 해결
# 4. push
git push

방법 2: GitHub 웹에서 해결

  1. PR 페이지에서 “Resolve conflicts” 클릭
  2. 웹 에디터에서 마커 제거
  3. “Mark as resolved” 클릭
  4. “Commit merge” 클릭

자주 하는 실수

충돌 마커를 그대로 커밋

// ❌ 이러면 안 됨!
<<<<<<< HEAD
code...
=======

확인 방법:

grep -r "<<<<<<" .
grep -r ">>>>>>" .

add 없이 commit 시도

$ git commit
error: Committing is not possible because you have unmerged files.

해결: git add 파일명 후 다시 시도


충돌 예방

  1. 자주 pull: 작업 전 git pull
  2. 작은 PR: 변경사항을 작게 유지
  3. 빠른 병합: 브랜치를 오래 열어두지 않기
  4. 소통: 같은 파일 작업 시 팀원과 조율

관련 문서

더 알아보기