반응형

Git-flow를 쓰다 보면 hotfix를 main 브랜치에 먼저 반영해야 하는 경우가 있습니다.
그런데 이 수정 사항을 develop에도 별도의 commit으로 넣어두면,
나중에 develop → main 머지할 때 문제가 생기곤 합니다.


 

문제 상황

develop -> main branch로 merge하기 위해 pr올린 상황에서 두 브랜치에서 같은 코드 부분이 변경된 이력으로 표시되는 문제가 발생했다. git에 문제가 생겼나 의심하면서 다시 pr을 올려봤지만 동일한 현상은 계속 발생했습니다.

  1. 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 사이에서 꼬이는 문제를 피할 수 있습니다.

반응형

+ Recent posts