본문 바로가기

pull 오류 : need to specify how to reconcile them 해결 방법

codeConnection 2024. 6. 21.

오류 내용

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.

 

이 오류는 내가 지금 로컬에서 갖고 있는 파일과 pull 받으려는 브랜치의 파일이 달라서 충돌을 해결해야 하는데, 어떤 방식으로 해결해야 하는지 정해지지 않았으니, 정하라는 이야기이다.

 

병합 충돌 방식을 정하고 나서 그 방식으로 pull 하겠다는 이야기이다.

해결 방법

힌트에서는 merge, rebase, fast-forward only 세 가지 방식 중 선택하라고 나온다.

  • merge : 기본 병합 방식으로 현재 브랜치에 병합 커밋을 생성하여 변경 사항을 병합한다.
  • rebase : 현재 브랜치의 변경 사항을 리베이스하여 병합 커밋 없이 깔끔하게 병합한다.
  • fast-forward only : 만약 현재 브랜치가 원격 브랜치의 부모 커밋이면, fast-forward 병합을 수행한다. 그렇지 않으면 병합을 거부한다.merge

merge (권장)

git config pull.rebase false

rabase

git config pull.rebase true

fast-forward only

git config pull.ff only

 

 

위 명령어는 이 리포지토리에서만 실행하겠다는 명령어이고, 다른 프로젝트를 하면 또 이런 에러가 발생하는 게 싫다면, 전역 설정으로 기본 설정을 정할 수도 있다.

 

앞에 --global을 붙이면 된다.

 

// merge 방식 예제
git config --global pull.rebase false

각 병합 방식에 대한 이해

다소 헷갈리는 개념일 수 있다. 예시를 보면 이해가 빠르다.

 

이게 병합 커밋이다. 병합 충돌 해결 후 남는 메시지인데, 커밋 로그가 복잡해질 수 있지만 추후 어디서 잘못되었는지 추척해 나가거나 할 때 실마리를 제공해줄 수 있기 때문에 권장된다.

 

 

댓글