강의/Git & Github 실무 활용 완벽 가이드

Git 브랜치 병합과 충돌, 해결

studylida 2025. 2. 5. 01:59

Git 브랜치 병합(Merging) 정리

1. 브랜치 병합(Merging) 개요

브랜치는 독립적으로 작업할 수 있지만, 최종적으로 메인 브랜치(main 또는 master) 에 병합해야 합니다.
병합을 수행하는 기본적인 방법은 git merge 명령어를 사용하는 것입니다.

git switch master  # master 브랜치로 이동
git merge bugfix   # bugfix 브랜치를 master에 병합

병합은 크게 빨리 감기 병합(Fast-Forward Merge)병합 커밋(Merge Commit) 두 가지 방식으로 이루어집니다.


2. 빨리 감기 병합(Fast-Forward Merge)

📌 특징

  • master 브랜치에서 추가된 커밋이 없을 때 발생
  • 새로운 병합 커밋 없이, master의 포인터를 bugfix 브랜치의 최신 커밋으로 이동

🛠 병합 과정

병합 전

master: A --- B  (현재 master 브랜치)
             \
              C --- D (bugfix 브랜치, 추가된 커밋)

병합 실행

git switch master  
git merge bugfix

병합 후

master: A --- B --- C --- D  (bugfix 브랜치의 최신 상태로 이동)
  • master의 포인터가 bugfix의 최신 커밋을 가리킴

🎯 빨리 감기 병합이 가능한 조건

  • master에서 추가된 커밋이 없음
  • 병합 시 충돌 발생 가능성이 없음

3. 병합 커밋(Merge Commit)

📌 특징

  • 두 브랜치에서 각각 새로운 커밋이 추가된 경우 발생
  • Git은 새로운 병합 커밋(Merge Commit) 을 생성하여 두 브랜치를 통합

🛠 병합 과정

병합 전

       A --- B --- C (master 브랜치)
      /
D --- E --- F (feature 브랜치)

병합 실행

git switch master  
git merge feature  

병합 후

       A --- B --- C --- M (병합 커밋, master 브랜치)
      /               /
D --- E --- F -------- (feature 브랜치 병합)
  • 새로운 병합 커밋(M)이 생성됨

📝 병합 메시지 수정 가능

git merge feature -m "Feature 브랜치를 master에 병합"

🎯 병합 커밋의 역할

  • 각 브랜치의 변경 사항을 하나의 커밋으로 통합
  • 브랜치 간의 관계를 명확하게 유지
  • 충돌 해결 후 최종 병합 커밋 생성

4. 병합 충돌(Merge Conflict)

Git은 대부분의 경우 병합을 자동으로 수행하지만, 같은 파일의 같은 부분이 서로 다르게 변경된 경우 병합 충돌이 발생합니다.

📌 충돌 발생 예시

master 브랜치

라인 1  
라인 2 (수정됨)  
라인 3  

feature 브랜치

라인 1  
라인 2 (다른 방식으로 수정됨)  
라인 3  

병합을 실행하면:

git merge feature

Git은 충돌 메시지를 출력하며 자동 병합이 불가능함을 알립니다.

🛠 충돌 해결 방법

  1. 충돌이 발생한 파일 확인 및 수정
    <<<<<<< HEAD
    라인 2 (master 브랜치에서 변경된 내용)
    =======
    라인 2 (feature 브랜치에서 변경된 내용)
    >>>>>>> feature
  • 원하는 내용을 유지하고 충돌 표시(<<<<<<<, =======, >>>>>>>)를 삭제
  1. 수정 후 커밋
    git add example.txt
    git commit -m "Resolve merge conflict in example.txt"

🎯 병합 충돌 해결의 핵심

  • Git은 자동으로 충돌을 해결하지 않음
  • 사용자가 직접 수정 후 병합 완료
  • 충돌 파일을 수정한 후 반드시 git addgit commit 실행

5. VS Code를 이용한 병합 충돌 해결

VS Code를 사용하면 GUI에서 충돌을 직관적으로 해결할 수 있습니다.

📌 해결 과정

  1. 충돌 발생 후 VS Code에서 파일 열기
  2. 충돌 부분에서 선택
    • Accept Current Change → 현재(master) 브랜치의 변경 사항 유지
    • Accept Incoming Change → 병합 대상(feature) 브랜치의 변경 사항 유지
    • Accept Both Changes → 두 변경 사항 모두 유지
  3. 충돌 해결 후 저장 및 커밋
    git add example.txt  
    git commit -m "Resolve merge conflict using VS Code"

6. Git 병합 연습

연습 링크

🏆 1. 빨리 감기 병합 (Fast-Forward Merge)

git switch -c new-branch  
echo "New feature" >> feature.txt  
git add feature.txt  
git commit -m "Add new feature"  

git switch master  
git merge new-branch  

✔️ Fast-forward 메시지가 나타나면 병합 완료


🏆 2. 병합 커밋 생성 (Merge Commit)

git switch -c french  
echo "Bonjour" >> greetings.txt  
git add greetings.txt  
git commit -m "Add French greeting"  

git switch master  
echo "Goodbye" >> farewells.txt  
git add farewells.txt  
git commit -m "Add farewells file"  

git merge french  

✔️ "Merge branch 'french'" 메시지가 나타나면 병합 완료


🏆 3. 병합 충돌 생성 및 해결

git switch -c japanese  
echo "Konnichiwa" >> greetings.txt  
git add greetings.txt  
git commit -m "Add Japanese greeting"  

git switch master  
echo "Hello" >> greetings.txt  
git add greetings.txt  
git commit -m "Add English greeting"  

git merge japanese  

✔️ "CONFLICT (content): Merge conflict in greetings.txt" 메시지 확인 후 직접 수정 후 커밋


7. Git 병합 요약

명령어 설명
git merge <브랜치> 지정한 브랜치를 현재 브랜치에 병합
git merge --no-ff <브랜치> 병합 커밋을 강제로 생성
git merge -m "메시지" <브랜치> 병합 커밋 메시지 지정
git add <파일> 충돌 해결 후 변경 사항 스테이징
git commit -m "Resolve merge conflict" 충돌 해결 후 커밋