Git 머지(merge)는 서로 다른 브랜치의 변경사항을 하나로 합치는 작업입니다. 주요 방법들을 정리해드리겠습니다.
기본 머지 명령어
bash
# 현재 브랜치에 다른 브랜치를 머지
git merge <브랜치명>
# 예시: main 브랜치에 feature 브랜치를 머지
git checkout main
git merge feature
머지 유형
1. Fast-Forward 머지
- 대상 브랜치가 현재 브랜치보다 앞서있을 때 발생
- 브랜치 포인터만 앞으로 이동하여 머지
- 별도의 머지 커밋이 생성되지 않음
bash
git merge feature # Fast-forward가 가능한 경우
2. 3-way 머지
- 두 브랜치가 서로 다른 커밋을 가지고 있을 때 발생
- 새로운 머지 커밋이 생성됨
- 두 브랜치의 공통 조상을 기준으로 머지
머지 옵션
–no-ff (No Fast Forward)
bash
git merge --no-ff feature
- Fast-forward가 가능해도 강제로 머지 커밋 생성
- 브랜치 히스토리를 명확하게 유지
–squash
bash
git merge --squash feature
- 대상 브랜치의 모든 커밋을 하나로 압축
- 머지 커밋은 생성되지 않고 스테이징 영역에 변경사항만 추가
–ff-only
bash
git merge --ff-only feature
- Fast-forward가 가능할 때만 머지 수행
- 불가능하면 머지 실패
충돌 해결
머지 중 충돌이 발생했을 때의 처리 과정:
bash
# 1. 머지 시도
git merge feature
# 2. 충돌 발생 시 상태 확인
git status
# 3. 충돌 파일 수정 후 스테이징
git add <충돌파일>
# 4. 머지 완료
git commit
충돌 표시 예시:
<<<<<<< HEAD
현재 브랜치의 내용
=======
머지하려는 브랜치의 내용
>>>>>>> feature
유용한 명령어
머지 상태 확인
bash
git status # 머지 상태 확인
git diff --staged # 스테이징된 변경사항 확인
git log --oneline --graph # 그래프로 히스토리 확인
머지 취소
bash
git merge --abort # 머지 진행 중 취소
git reset --hard HEAD~1 # 머지 완료 후 되돌리기 (주의!)
베스트 프랙티스
- 머지 전 준비
- 작업 디렉토리를 깨끗하게 정리 (
git status) - 최신 상태로 업데이트 (
git pull)
- 작업 디렉토리를 깨끗하게 정리 (
- 브랜치 전략
- feature 브랜치는 main으로 머지
--no-ff옵션으로 명확한 히스토리 유지
- 충돌 최소화
- 자주 머지하여 충돌 범위 줄이기
- 코드 리뷰 후 머지 수행
- 머지 메시지
- 의미 있는 커밋 메시지 작성
- 머지 이유와 변경사항 명시
이러한 방법들을 상황에 맞게 선택하여 사용하시면 효율적인 Git 워크플로우를 구축할 수 있습니다.
