[Git] git push, pull error(fatal: refusing to merge unrelated histories)

Kim Tae Won·2021년 12월 29일
1

git pull이나 push를 할 때 아래와 같은 에러가 발생한 적이 있을 것이다.

사용자 MINGW64 ~/Desktop/Test (main)
$ git pull origin main
From https://github.com/레퍼지토리_이름
 * branch            main       -> FETCH_HEAD
fatal: refusing to merge unrelated histories
(base) 

해당 문제가 발생하는 이유는 서로 관련이 없는 두 프로젝트를 병합하려고 할 때 git이 이를 기본적으로 거부하기 때문이다. 즉, commit 히스토리가 서로 관련이 없기 때문에 발생한다.

pull 명령어는 fetch와 merge를 한 번에 처리하는 것으로, 위의 문제에서는 fetch는 되었지만 merge가 진행되지 않은 상황이다. merge를 위해서는 원격 저장소와 로컬 저장소가 공통으로 가지는 commit 기록이 있어야 한다.

git은 merge를 진행할 때, 해당 기록부터 병합을 시도하기 때문인데, 만약 둘 사이에 공통되는 commit이 없다면 pull 명령어 자체가 거부되는 것이다.

요약하자면, 로컬 저장소와 원격저장소의 commit 기록들을 비교하게 되는데, 이 때 두 저장소의 차이가 너무 크거나 관련이 없을 경우 git에서는 pull을 거부하게 된다고 한다.(또는 공통된 commit point가 없을 때 발생한다)

나의 경우 대부분 해당 문제는 로컬에서 먼저 프로젝트를 생성하고 초기 작업을 한 뒤, 뒤늦게 github에 원격저장소를 생성하고 remote add를 통해 원격 저장소를 연결한 경우 pull을 할 때 발생했다.

해결책은 --allow-unrelated-histories옵션을 붙여 pull을 진행하면 된다. 이 옵션은 서로 관련이 없는 두 프로젝트(저장소)를 병합(merge)할 때 기본적으로 거부하는 하는 것을 허용해주는 것이다.

git pull origin (branch이름) --allow-unrelated-histories

참고

profile
꿈이 너무나 큰 평범한 컴공 대딩에서 취업 성공!

0개의 댓글