게시글

5만명이 선택한 평균 별점 4.9의 제로초 프로그래밍 강좌! 로드맵만 따라오면 됩니다! 클릭
Git - 한 달 전 등록

fatal: Need to specify how to reconcile divergent branches 해결하기

얼마 전에 다음과 같은 에러가 발생해서 git pull이 안 되었던 적이 있습니다. git reset 같은 명령어를 잘못 수행하면 head가 꼬여서 저런 문제가 발생할 수 있습니다.

undefined

그러면 이미지의 hint에 나오는대로

git config pull.rebase false
git config pull.rebase true
git config pull.ff only

세 명령어 중 하나를 입력하면 됩니다. 설명 들어갑니다.

git config pull.rebase false 

기본 방식입니다. git pull을 받아올 때 받아온 원격 브랜치를 merge합니다. merge 시 새로운 커밋 하나가 생기며 합쳐지는데 보통 이름이 "Merge remote tracking branch 'origin/main'으로 되어 있습니다.

원격 A -> B -> C
기존 D -> E 

에서 D -> E -> F(Merge remote tracking branch 'origin/main') 이 되는 겁니다. 원격 브랜치는 나중에 F 브랜치를 fast forward 할 수 있습니다. fast forward 설명은 밑에 있습니다.

git config pull.rebase true

git pull을 받아올 때 받아온 원격 브랜치를 rebase합니다. 이렇게 하면 새로운 커밋은 생기지 않지만 기존 브랜치 위에 원격 브랜치의 커밋이 모두 올라가 버립니다.

원격 A -> B -> C
기존 D -> E

에서 D -> E -> A -> B -> C가 되어 버립니다. merge가 좋은지 rebase가 좋은지는 호불호의 영역이라 고르시면 됩니다.

git config pull.ff only

가장 간단한 방법인데, ff는 fast forward를 의미합니다. ff only는 fast forward만 가능하게 한다는 뜻입니다. 이것을 하려면 원격과 기존 브랜치가 분리되어 있으면 안 됩니다.

원격 A -> B -> C
기존 A -> B 인 경우는

A -> B -> C로 빠르게 pull 하는 게 fast forward 방식입니다.

원격 A -> B -> C
기존 A -> B -> D 인 경우에는 사용할 수 없습니다.

제한적인 방법이지만 가장 쉬운 방법입니다.

해결 방법

그래서 해결 방법이 뭐냐고요? 기본 값인 merge 모드에서 에러가 나는 것이므로 git config pull.rebase true를 하고 git pull을 받으시면 됩니다. 끝나고 다시 git config pull.rebase false로 되돌려 놓는 것도 잊지 마세요.

조회수:
0
목록
투표로 게시글에 관해 피드백을 해주시면 게시글 수정 시 반영됩니다. 오류가 있다면 어떤 부분에 오류가 있는지도 알려주세요! 잘못된 정보가 퍼져나가지 않도록 도와주세요.
Copyright 2016- . 무단 전재 및 재배포 금지. 출처 표기 시 인용 가능.
5만명이 선택한 평균 별점 4.9의 제로초 프로그래밍 강좌! 로드맵만 따라오면 됩니다! 클릭

댓글

1개의 댓글이 있습니다.
한 달 전
커밋 그래프를 예시로 들어 보여주시니 이해가 잘 되었습니다 !