Skip to content

충돌 해결과 병합

충돌(Conflict)이란?

여러 사람이 같은 파일의 같은 부분을 동시에 수정하고 push할 때 발생하는 현상입니다. Git은 어떤 변경이 옳은지 스스로 판단할 수 없기 때문에, 개발자가 직접 해결해야 합니다.

충돌 발생 시나리오

시나리오 상세

  1. A와 B 모두 a.txt를 pull 받아 동기화한 상태
  2. A는 로컬에서 a.txt에 "a sentence"를 추가하고 커밋
  3. B도 로컬에서 a.txt에 "b sentence"를 추가하고 커밋
  4. B가 먼저 push → 원격 저장소에 "b sentence" 반영
  5. A가 push 시도 → 원격에 반영 안 된 변경사항(B의 커밋)이 있어서 거부됨

충돌 해결 프로세스

충돌 표식 이해하기

git pull 후 충돌이 발생하면, Git이 파일에 충돌 표식을 삽입합니다:

some sentence
another sentence
<<<<<<< HEAD
a sentence
=======
b sentence
>>>>>>> aa8b939
표식의미
<<<<<<< HEAD내 로컬 브랜치(현재 작업 공간)의 시작
=======내 변경사항과 원격 변경사항의 경계
>>>>>>> 해시값원격 커밋의 변경사항 끝

충돌 해결 방법

충돌 표식을 보고 어떤 코드를 남길지 결정한 뒤, 표식을 제거합니다.

선택지 1: 둘 다 남기기

some sentence
another sentence
a sentence
b sentence

선택지 2: 내 코드만 남기기

some sentence
another sentence
a sentence

선택지 3: 원격 코드만 남기기

some sentence
another sentence
b sentence

실습: 충돌 발생부터 해결까지

명령어 순서

bash
# 1. 로컬에서 파일 수정 및 커밋
vim a.txt
# → "a sentence" 추가
git add a.txt
git commit -m "add a sentence to a.txt"

# 2. push 시도 (실패)
git push
# ERROR: 원격에 반영 안 된 변경사항 있음

# 3. 원격 변경사항 가져오기
git pull
# CONFLICT in a.txt

# 4. 충돌 파일 열어서 해결
vim a.txt
# → 충돌 표식 확인
# → 남길 코드 결정
# → 표식 제거 후 저장 (:wq)

# 5. 해결 완료 표시
git add a.txt

# 6. 병합 커밋 생성 (메시지 자동 생성)
git commit
# → 자동 생성된 merge 메시지 확인 → :wq

# 7. 원격에 반영
git push

병합 커밋의 메시지

충돌 해결 후 git commit을 하면 (-m 없이) Git이 자동으로 병합 메시지를 생성합니다. "Merge branch 'main' of github..." 같은 내용이 자동으로 채워지므로, 그대로 :wq로 저장하면 됩니다.

충돌 해결 요약

여러 사람들과 Git 작업을 하다 보면 충돌이 발생할 수밖에 없습니다. 충돌을 두려워하지 말고, 해결하는 과정을 자연스러운 협업의 일부로 받아들이세요.