main-dev 브랜치 병합 시 Merge 커밋 메시지 생성/미생성 원인 파악

2025-07-12


실무에서 main(master)dev(develop) 브랜치를 분리해 개발하는 경우가 많습니다. 이때 두 브랜치를 병합(merge)할 때 merge 커밋 메시지가 생기기도 하고, 안 생기기도 하는 이유를 명확히 이해해야 협업과 히스토리 관리가 쉬워집니다.

브랜치 분리 상황

  • main: 배포/운영용, 항상 안정적인 코드만 유지
  • dev: 개발용, 여러 기능/버그 수정 커밋이 쌓임
  • 개발이 끝나면 dev → main으로 병합

merge 커밋 메시지가 생기고, 안 생기는 이유

핵심은 Git의 병합 방식에 있습니다. 대표적으로 두 가지:

1. Fast-forward merge (빠른 병합) → 커밋 메시지 없음

  • 조건: main 브랜치가 dev 브랜치보다 뒤처져만 있고, main에는 dev 이후 별도 커밋이 없음
  • 결과: main이 dev의 커밋을 그대로 따라가며, 병합 커밋 없이 선형 히스토리 유지
  • 커밋 메시지 없음
git checkout main
git merge dev   # fast-forward → 병합 커밋 없음

2. Merge commit (일반 병합) → 커밋 메시지 생김

  • 조건: main과 dev에 서로 다른 커밋이 존재할 때 (main에도 dev 이후 커밋이 있음)
  • 결과: Git이 두 브랜치를 병합하며 새로운 병합 커밋을 생성
  • 자동 커밋 메시지 생성: Merge branch 'dev' into main
git checkout main
git merge dev   # 일반 병합 → 병합 커밋 + 메시지 생성

어떻게 확인할 수 있나요?

git log --oneline --graph
  • Fast-forward: 브랜치가 쭉 이어짐 (선형)
  • Merge commit: 갈라졌다가 합쳐진 흔적(⎇)이 보임

정리 표

상황병합 커밋커밋 메시지
main에 커밋 없음, dev만 앞섬❌ 없음 (Fast-forward)❌ 없음
main과 dev 모두 커밋 있음✅ 있음 (Merge commit)✅ 자동 생성 (Merge branch 'dev'...)
--no-ff 옵션 사용 시✅ 항상 생성✅ 명시적 메시지 입력

팁: 항상 병합 커밋을 만들고 싶다면?

git merge dev --no-ff
  • 또는 GitHub PR에서 "Create a merge commit" 옵션을 선택하면 됩니다.

댓글

GitHub 계정으로 댓글을 남겨보세요!