체인의정석

git 오류 "fatal: Need to specify how to reconcile divergent branches." 본문

개발/git

git 오류 "fatal: Need to specify how to reconcile divergent branches."

체인의정석 2022. 11. 21. 10:24
728x90
반응형

git pull을 할 때 기본적으로 어떤 전략을 취해야 하는지 설정을 안해주면 아래와 같은 에러가 나게 된다.

hint: You have divergent branches and need to specify how to reconcile them.
hint: You can do so by running one of the following commands sometime before
hint: your next pull:
hint: 
hint:   git config pull.rebase false  # merge
hint:   git config pull.rebase true   # rebase
hint:   git config pull.ff only       # fast-forward only
hint: 
hint: You can replace "git config" with "git config --global" to set a default
hint: preference for all repositories. You can also pass --rebase, --no-rebase,
hint: or --ff-only on the command line to override the configured default per
hint: invocation.
fatal: Need to specify how to reconcile divergent branches.

먼저 이걸 이해하기 위해 기본적인 지식들이 필요했다.

 

1. fast-forward 관계

단어 뜻을 찾아보니 fast forward는 빨리감기 라는 뜻이라고 나온다.

아래 블로그 글을 통해 이해할 수 있었다. A가 dev고 B가 내가 담당한 수정 부분에 대한 브랜치라면 A의 히스토리와 같은 커밋일 때는 fast-forward 관계에 있는 것이다.

------ 퍼온 글 -----

2개의 커밋 A와 B가 있을때에 커밋A에 따른 히스토리가 커밋B에 따른 히스토리에 전부 포함되어 있는 경우,
2개의 커밋은 fast-forward관계이다 라던지 커밋A는 커밋B에 fast-forward한다라고 말한다.

출저 블로그 :https://blog.naver.com/PostView.nhn?isHttpsRedirect=true&blogId=parkjy76&logNo=220308638231&categoryNo=73&parentCategoryNo=0&viewDate=¤tPage=1&postListTopCurrentPage=1&from=postView

 

------ 퍼온 글 -----

 

2. git config pull.ff only

 

hint:   git config pull.ff only       # fast-forward only

그럼 이뜻은? 내가 dev브랜치와 fast forward 일때만 pull을 하겠다는 뜻이다.

 

 

https://sanghye.tistory.com/43

 

[GIT] Git pull 전략 (default, --ff -only, --rebase)

git pull 을 별도 옵션 없이 하게되면 다음과 같은 warning 이 발생하는 것을 볼 수 있습니다. warning: Pulling without specifying how to reconcile divergent branches is discouraged. You can squelch this message by running one of the

sanghye.tistory.com

해당 블로그를 참고해보니

"git pull --ff-only 의 옵션을 주어 실행하게 되면 fast-forwarded 가 새로운 commit 이 발생하지 않고 실행"

 

 

된다고 합니다. 

 

만약 fast-forward가 안될 경우 git rebase 나 git merge로 해결해 주어야 한다고 합니다.

 

 

3. git config pull.rebase 

 

rebase의 경우 위의블로그에서 본 그림을 통해 이해할 수 있었다.

Local을 위에다가 올려버리는 것인데 이 경우 history가 변경 될수 있기 때문에 주의해야 한다고 한다.

 

 git config pull.rebase를 false로 두게 되면 merge 병합이 되게 된다.

 git config pull.rebase를 true로 두게 되면 rebase가 되게 된다.

 

https://velog.io/@yunu/git-pull-%ED%95%A0-%EB%95%8C-fatal-Need-to-specify-how-to-reconcile-divergent-branches.-%EC%98%A4%EB%A5%98

 

git pull 할 때 fatal: Need to specify how to reconcile divergent branches. 오류

현재 내 깃 버전은 다음과 같다. 어떤 버전에서부터인진 모르겠지만 이전 버전에서는 git pull을 할 때 자동으로 merge 전략을 사용한 것 같지만 최신 버전에서는 어떤 전략을 사용할지 따로 지정되

velog.io



만약 merge 병합을 하게 될 경우 불필요한 commit이 남게 되지만 merge 병합을 안하게 되면 rebase를 써서 history가 변경될 가능성이 있게 된다.

 

결국 ff only에 rebase를 ture로 조합하여 불필요한 커밋을 줄이면서 매번 rebase를 시켜주거나

아니면 merge 병합을 시키는 방법 2가지가  있는것  같다.

4. git config --global pull.ff true 

근데 외국 고수분의 글을 보니 이 3가지 (사실상 2가지) 말고 4번째 선택지가 있는거 같다.

https://github.com/desktop/desktop/issues/14431

 

"You have divergent branches and need to specify how to reconcile them." · Issue #14431 · desktop/desktop

The problem I keep´getting this issue all of the sudden. hint: You have divergent branches and need to specify how to reconcile them. hint: You can do so by running one of the following commands so...

github.com

바로

git config --global pull.ff true

 

이걸 쓰는 것이다.

이걸 쓰게 되면 로컬 브랜치에서 원격 브랜치를 fast forward 할 수 있게 하면서 로컬 브랜치에 머지를 수행하지 않기 때문이다.

여기에 대한 대안은 역시 위에 언급한 항상 머지를 시키거나 rebase를 진행하는 것인데.

 

실제로 위의 명령어를 해보니 충돌이 발생하는 상황에서는 merge 커밋이 올라가게 되고 그 외의 경우에는 오류 메세지 없이 잘 작동하는 것을 확인할 수 있었다.

 

 

728x90
반응형
Comments