본문 바로가기

Develop/Git

Git 협업 시 자주 발생하는 충돌 상황 & 해결 방법

⚡ Git 협업 시 자주 발생하는 충돌 상황 & 해결 방법

1. 📝 같은 파일, 같은 줄 수정 충돌

상황:

  • A와 B가 같은 파일의 같은 부분을 각각 수정하고 커밋 → push/pull 시 충돌 발생

에러 메시지 예시:

CONFLICT (content): Merge conflict in src/app.js

해결 방법:

  1. 충돌난 파일을 열면 Git이 자동으로 conflict 마커를 넣음
    <<<<<<< HEAD
    console.log("A 버전 코드");
    =======
    console.log("B 버전 코드");
    >>>>>>> feature/branch-b
  2. 원하는 코드로 수정 후 저장
    console.log("최종 합쳐진 코드");
  3. 수정 완료 후 커밋
    git add src/app.js
    git commit

     

2. 📂 같은 파일 삭제 vs 수정 충돌

상황:

  • A는 user.js 파일을 삭제, B는 같은 파일을 수정 → 병합 시 충돌

해결 방법:

  • 정말 삭제할지(git rm 유지) 아니면 수정한 버전을 살릴지 선택해야 함
# 수정본 살리기 → 파일 복구 후 add
git restore user.js
git add user.js

# 삭제 유지
git rm user.js
git commit
 

3. 🌳 브랜치 머지 시 충돌

상황:

  • feature/login 브랜치 작업 후 → main에 병합할 때 main이 이미 변경되어 충돌 발생

해결 방법:

  1. main 최신화 후 내 브랜치에 반영
    git checkout main
    git pull origin main
    git checkout feature/login
    git merge main   # 또는 git rebase main
  2. 충돌 해결 후 add/commit

4. 📦 Pull 할 때 충돌

상황:

  • 내가 로컬에서 커밋한 상태에서 git pull 하면, 원격과 충돌 발생

해결 방법:

  1. Git이 자동으로 merge 시도 → 충돌 발생 시 파일 열고 수정
  2. 해결 후
    git add .
    git commit
    git push


5. 🔀 rebase 중 충돌

상황:

  • rebase 중간에 충돌 발생 (커밋 히스토리를 깔끔하게 만들려고 자주 씀)

해결 방법:

# 충돌 파일 수정 → add
git add <파일>

# rebase 계속 진행
git rebase --continue

# 만약 rebase 포기
git rebase --abort

✅ 충돌 해결 3단계 공식

  1. 충돌 확인 → git status
    (어떤 파일에 충돌났는지 확인)
  2. 수동 수정 → 파일 열고 conflict 마커(<<<<<<<, =======, >>>>>>>) 제거
  3. 해결 후 기록 → git add <파일> → git commit

💡 충돌 예방 TIP

  • 항상 작업 시작 전 git pull origin main 해서 최신 코드 가져오기
  • 작은 단위로 자주 commit & push
  • 팀 내에서 코딩 컨벤션 맞춰두면 불필요한 충돌 줄어듦 (예: 줄바꿈, 들여쓰기 등)
  • 가능하면 merge 대신 rebase를 활용해 이력 깔끔하게 유지