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은 충돌 메시지를 출력하며 자동 병합이 불가능함을 알립니다.
🛠 충돌 해결 방법
- 충돌이 발생한 파일 확인 및 수정
<<<<<<< HEAD 라인 2 (master 브랜치에서 변경된 내용) ======= 라인 2 (feature 브랜치에서 변경된 내용) >>>>>>> feature
- 원하는 내용을 유지하고 충돌 표시(
<<<<<<<
,=======
,>>>>>>>
)를 삭제
- 수정 후 커밋
git add example.txt git commit -m "Resolve merge conflict in example.txt"
🎯 병합 충돌 해결의 핵심
- Git은 자동으로 충돌을 해결하지 않음
- 사용자가 직접 수정 후 병합 완료
- 충돌 파일을 수정한 후 반드시
git add
및git commit
실행
5. VS Code를 이용한 병합 충돌 해결
VS Code를 사용하면 GUI에서 충돌을 직관적으로 해결할 수 있습니다.
📌 해결 과정
- 충돌 발생 후 VS Code에서 파일 열기
- 충돌 부분에서 선택
Accept Current Change
→ 현재(master) 브랜치의 변경 사항 유지Accept Incoming Change
→ 병합 대상(feature) 브랜치의 변경 사항 유지Accept Both Changes
→ 두 변경 사항 모두 유지
- 충돌 해결 후 저장 및 커밋
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" |
충돌 해결 후 커밋 |
'강의 > Git & Github 실무 활용 완벽 가이드' 카테고리의 다른 글
Git Stash: 변경 사항 임시 저장과 복원 (0) | 2025.02.05 |
---|---|
Git diff 사용법: 변경 사항 비교와 추적 (0) | 2025.02.05 |
Git 브랜치 개념과 활용 (0) | 2025.02.03 |
Git 커밋과 로그, 그리고 실용적인 팁 (0) | 2025.02.03 |
Git 기초 개념과 필수 명령어 정리 (0) | 2025.02.03 |