GIT
협업을 위한 Git 브랜치 전략과 충돌 해결 완전 가이드
2025. 5. 24. 18:11
728x90

협업을 위한 Git 사용 가이드

협업 시 Git을 올바르게 사용하지 않으면 충돌(merge conflict)이 자주 발생할 수 있습니다. 특히 main 브랜치에서 파생된 feature 브랜치에서 작업하고, PR(Pull Request)을 보낼 때 충돌이 생기는 경우는 협업 구조와 워크플로우에 대한 이해가 부족한 경우가 많습니다. 이 문서에서는 로컬, 원격(GitHub), 브랜치 전략을 중심으로 협업 시 Git을 효율적으로 사용하는 방법을 정리합니다.


1. Git 기본 구조 이해하기

▶︎ 로컬(Local) vs 원격(Remote)

  • 로컬 저장소: 내 컴퓨터에서 작업하는 Git 저장소
  • 원격 저장소(GitHub): 팀원들과 공유하는 중앙 저장소
  • push: 로컬 변경사항을 원격 저장소로 업로드
  • pull: 원격 저장소의 변경사항을 로컬로 가져오기
  • fetch + merge / rebase: 원격 내용만 가져오고 수동으로 병합 또는 재정렬

▶︎ 브랜치란?

  • 브랜치는 독립적인 작업 단위입니다. 하나의 기능 또는 버그 수정마다 새로운 브랜치를 생성합니다.
  • main은 배포 가능한 안정적인 버전을 유지하는 브랜치입니다.
  • 그 외 브랜치는 feature/기능명, fix/버그명 등으로 명명합니다.
# 브랜치 생성 및 이동
git checkout -b feature/login

2. 협업을 위한 브랜치 워크플로우

  1. main 브랜치 최신화
  2. git checkout main git pull origin main
  3. 기능 브랜치 생성
  4. git checkout -b feature/your-feature
  5. 코드 작업 및 커밋
  6. git add . git commit -m "feat: 로그인 기능 구현"
  7. 원격 브랜치 푸시
  8. git push origin feature/your-feature
  9. GitHub에서 Pull Request(PR) 생성
    • PR 대상: feature/* -> main
    • 리뷰어 지정 → 코드 리뷰 → 병합

3. merge conflict 방지 및 해결

▶︎ 충돌이 자주 발생하는 이유

  • main 브랜치가 변경되었는데, 내 브랜치가 오래된 상태에서 PR을 보낼 경우
  • 같은 파일의 같은 부분을 동시에 수정한 경우

▶︎ 충돌 방지를 위한 습관

  1. 내 브랜치를 최신 main으로 수시로 rebase
  2. git fetch origin git rebase origin/main
  3. 충돌 발생 시 수동으로 해결 후 rebase 이어서 진행
  4. # 충돌 해결 후 git add . git rebase --continue
  5. 최종 push (강제)rebase는 커밋 히스토리를 변경하므로 force push 필요
  6. git push --force-with-lease

4. GitHub PR 중 충돌 발생 시 대응법 (실제 상황 예시)

GitHub Pull Request 화면에서 다음 메시지를 본다면:

  • Merge blocked: 1 check failed
  • Merge conflicts must be resolved
  • The source branch is 24 commits behind the target branch

▶︎ 문제 원인

  • main 브랜치가 최신 상태인데, feature 브랜치가 오래된 상태여서 충돌 발생

▶︎ 해결 방법 (로컬에서 수동 rebase)

  1. main 브랜치 최신화 후 rebase 시작
  2. git checkout main git pull origin main git checkout feature/your-feature git rebase main
  3. 충돌 해결 (수동)
    • Git이 충돌난 파일을 표시함
    • 파일을 열고 <<<<<<<, =======, >>>>>>> 표시된 부분을 보고 어떤 코드를 남길지 결정
    • 충돌 해결 후:
    git add .
    git rebase --continue
  4. 충돌이 여러 번 날 수 있음 → 계속 반복
  5. 마지막으로 강제 푸시
  6. git push --force-with-lease
  7. GitHub에서 PR 화면 새로고침 → Merge 가능해짐

5. rebase vs merge 차이점 정리

항목 merge rebase
커밋 기록 브랜치 통합 시 병합 커밋 생성 (merge commit) 히스토리를 재작성하여 선형(linear) 커밋 흐름 유지
충돌 해결 방식 병합 시 1회에 해결 커밋 하나하나마다 충돌을 해결해야 할 수도 있음
기록 유지 원래 커밋 히스토리 보존 커밋 ID가 변경됨 (force push 필요)
GitHub 전략 단순 병합(Squash or Merge commit) PR 전에 개인이 히스토리 정리 용도로 사용
사용 목적 빠른 병합, 리뷰 추적 깔끔한 히스토리 관리, 협업 전 정리

▶︎ 어떤 것을 사용해야 할까?

  • 팀에서 히스토리 가독성을 중요시한다면 rebase
  • 간편하고 안전한 병합을 원한다면 merge
  • 일반적으로는 개인 브랜치에서 rebase로 정리 후 PR에서는 squash merge를 추천

6. 정리된 협업 전략 (Best Practice)

  • main 브랜치에는 직접 커밋하지 않기
  • 기능 단위로 브랜치 생성: feature/, fix/, refactor/ 등
  • PR 전에 항상 main 기준으로 rebase
  • 리뷰어를 지정하고 반드시 코드 리뷰 후 merge
  • merge 대신 rebase + squash 전략 사용 권장 (히스토리 깔끔함)

7. GitHub Pull Request 기본 절차

  1. 브랜치 푸시 후 PR 생성
  2. 리뷰어 등록 및 리뷰 요청
  3. 충돌 여부 확인 및 수정
  4. Approve 이후 merge (또는 squash and merge)

마무리

Git은 단순히 버전 관리 도구가 아닌 협업의 핵심 도구입니다. 기능 개발 시 브랜치 전략과 병합 전략을 잘 이해하고 활용하면 충돌 없이 효율적인 협업이 가능합니다. 꾸준히 fetch, rebase, pull을 병행하며 동기화를 유지하는 습관이 중요합니다.

⚠️ 초보자라면 merge보다 rebase는 위험할 수 있으니, 팀 내에서 표준 워크플로우를 먼저 정하고 실습을 통해 익히는 것을 권장합니다.

728x90

'GIT' 카테고리의 다른 글

이슈 기반 Git 브랜치 전략과 협업 흐름 완전 정리  (0) 2025.05.24