728x90
fatal: refusing to merge unrelated histories

 

❓상황

다른 사람 원격저장소의 branch를 나의 로컬 저장소로 git pull할때 발생한 오류

 

🔎 원인 파악

기본적으로 git pull은 git fetch와 git merge의 2개의 명령어를 합친 명령어이다.

 

git fetch의 경우에는, 원격 저장소의 내용을 가져온다.

조금 더 정확히는 원격 저장소의 branch들을 가져온다.

 

확인하려면, git fetch 한 후에, git branch -r을 하면 다른 사람 원격저장소의 branch들을 가져온 것을 볼 수 있다.

git branch -r

 

git merge의 단편적인 개념으로는 원격 저장소의 특정 branch와 현재 선택된 나의 로컬 저장소의 branch와 합쳐지게된다.

 

merge되는 기준은 무엇일까?

 

그것은 합쳐지는 2개의 branch의 공통으로 가지고 있는 commit 내역이 기준이 되어 병합이 이루어진다.

즉, merge가 일어나려면, 원격 저장소와 로컬 저장소가 공통으로 가지고 있는 commit지점이 존재해야 한다.

그 지점부터 병합을 시도하기 때문이다.

숫자로 적힌 것을 보지 말고, base로부터 분기된 branch이어여만 merge가 된다고 이해하자

 

그렇다면, git pull을 할때 발생하는 오류(fatal: refusing to merge unrelated histories)는 fetch와 merge 명령어 중, 어느 쪽에서 발생하는 것일까?

 

알아보니, git merge에서 발생한 것으로 보인다.

그 이유는, 나의 로컬 저장소의 commit 내역과 다른 사람의 원격 저장소의 commit 내역 중 공통되는 commit이 없기 때문이다.

 

그래서 컴퓨터는 '어라? 같은 base로 분기된 branch( = '공통된 commit 내역이 없다는 말'과 동일한 말임.)가 아니라, 전혀 연관성이 없는 branch 2개를 합친다고? 안돼 error 발생시켜야겠어' 라고 하는 것이다.

 

✨ 해결 방법

연관성 없는 branch도 합치라는 옵션을 부여한다.

git pull origin {branch 이름} --allow-unrelated-histories
복사했습니다!