반응형
Git-flow를 쓰다 보면 hotfix를 main 브랜치에 먼저 반영해야 하는 경우가 있습니다.
그런데 이 수정 사항을 develop에도 별도의 commit으로 넣어두면,
나중에 develop → main 머지할 때 문제가 생기곤 합니다.
문제 상황
develop -> main branch로 merge하기 위해 pr올린 상황에서 두 브랜치에서 같은 코드 부분이 변경된 이력으로 표시되는 문제가 발생했다. git에 문제가 생겼나 의심하면서 다시 pr을 올려봤지만 동일한 현상은 계속 발생했습니다.
- main에서 hotfix 진행
git checkout main
# 버그 수정
git commit -m "hotfix: critical bug fix"
git push origin main
2. develop에도 동일한 수정을 별도 commit으로 추가
git checkout develop
# 동일 수정
git commit -m "fix: same bug fix on develop"
git push origin develop
3. 이렇게 되면 코드 내용은 같아도 commit hash가 다르기 때문에 나중에 develop → main 머지 시 충돌(conflict)이나 중복 diff가 발생할 수 있습니다.
올바른 해결 방법
핵심은 main의 hotfix commit을 develop으로 merge 해주는 것입니다.
git checkout develop
git merge main
정상적으로 merge되면 아래처럼 메시지가 뜹니다.
Merge made by the 'ort' strategy.
이 상태에서는 main과 develop이 동일한 commit을 공유하기 때문에, 나중에 develop → main 머지할 때 문제가 발생하지 않습니다.
'ort' strategy란?
Git 2.34부터 기본 머지 전략이 recursive에서 ort로 바뀌었습니다.
- ort = Optimal Recursive Technique
- 장점:
- 이전보다 훨씬 빠른 머지 성능
- 충돌 처리 로직 단순화
- 더 직관적인 결과 제공
따라서 "Merge made by the 'ort' strategy."는 최신 Git에서 정상적으로 merge가 수행되었다는 의미입니다.
정리
- hotfix는 무조건 main에서 처리
- hotfix 후에는 반드시 main → develop merge 진행 및
- develop에 동일한 수정을 별도 commit으로 만들면 안 됨
이 원칙만 지키면, main–develop 사이에서 꼬이는 문제를 피할 수 있습니다.
반응형