DEV-STUDY/Git

[트러블슈팅] fatal : refusing to merge unrelated histories

HwangJerry 2023. 11. 7. 19:57

프로젝트 팀의 FE 레포를 분리하여 관리했었는데, 이번에 프론트엔드 코드를 확인할 일이 있어서 레포에서 pull을 받으려고 했다가 마주한 에러이다.

 

진행했던 시나리오는 다음과 같다.

git init

git remote add origin <origin_url>

git branch -m main

git pull origin main

git switch -c dev

git pull origin dev

 

main으로부터 dev가 분기했을 것이고, dev는 main보다 더 많은 커밋이 쌓여있는 상황이었기에 dev와 main의 커밋 히스토리 중 main이 당연히 더 뒤에 있을 것이라 판단하였다.

 

하지만 추측컨데, 그러지 않았던 것 같다.

 

git pull origin dev를 수행하는 순간, fatal : refusing to merge unrelated histories 라는 에러를 마주하였다. 딱 봐도, 히스토리가 다르기 때문에 git에서 이 두 log를 하나로 merge 할 수 없다고 하는 것으로 보였다.

 

하지만 이는 내가 원하는 결과가 아니였으며, main에 최신 코드가 하나도 없었고, dev 브랜치에 있는 코드가 기준이 되고 있었기에 origin/dev를 강제로 pull할 수 있는 방법을 알아보았다.

 

방법은 다음과 같이 --allow-unrelated-histories 옵션을 넣어서 pull하는 것이다.

git pull origin <branches> --allow-unrelated-histories

 

위 명령어를 사용하면 origin/dev와 local/dev 브랜치의 근간 커밋 기록이 다르더라도 이를 무시하고 pull받을 수 있다.

 

결론

브랜치 간 history 관리의 중요성을 깨닫게 되는 순간이었다. 이렇게 강제 merge 과정이 반복되면 git을 이용하여 버전관리를 용이하게 할 수 없게 되니 주의해야 할 것이다.