a11@11ui-MacBookPro peer-client % git pull origin main From https://github.com/swyp-peer/peer-client * branch main -> FETCH_HEAD 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. a11@11ui-MacBookPro peer-client % git branch
위와 같은 오류가 떴다.
git pull 명령어를 사용했을 때 나타난 이 오류 메시지는 로컬 브랜치와 원격 브랜치가 갈라진(diverged) 상태임을 알려줍니다. 이는 로컬과 원격 레포지토리 양쪽에서 새로운 커밋이 이루어진 상태로, 각각의 브랜치가 서로 다른 역사(history)를 가지고 있기 때문에 발생합니다. 따라서, 이를 해결하기 위해 어떤 방식으로 브랜치를 병합할지 명시적으로 지정해야 합니다.
오류 메시지에서 제안하는 세 가지 해결 방법은 다음과 같습니다:
- Merge (병합) 사용하기 (git config pull.rebase false): 이 옵션을 선택하면, git pull 명령은 기본적으로 merge를 사용하여 원격 브랜치의 변경사항을 현재 브랜치로 병합합니다. 이 경우, 두 브랜치의 변경사항이 하나의 새로운 "merge commit"을 통해 통합되며, 모든 변경 이력이 보존됩니다.
- Rebase 사용하기 (git config pull.rebase true): rebase 옵션을 설정하면, 로컬 브랜치의 커밋들이 원격 브랜치의 최신 커밋 뒤로 재배치됩니다. 이는 작업 트리의 이력을 깔끔하게 유지하며, 마치 로컬 변경사항이 마지막으로 발생한 것처럼 보이게 합니다. 하지만 이 과정에서 충돌이 발생할 수 있으며, 충돌을 수동으로 해결해야 할 수도 있습니다.
- Fast-forward만 허용하기 (git config pull.ff only): 이 설정은 원격 브랜치의 변경사항을 현재 브랜치에 단순히 fast-forward 방식으로만 적용하도록 합니다. 이는 로컬 브랜치가 원격 브랜치의 변경사항 뒤에 위치할 경우에만 가능합니다. 만약 로컬 브랜치에 원격 브랜치가 포함하지 않은 커밋이 있을 경우, 이 방법은 적용되지 않으며 오류가 발생합니다.
git branch 명령을 통해 현재 브랜치를 확인하고, 위 방법 중 하나를 선택하여 설정한 후 다시 git pull을 시도할 수 있습니다. 설정은 git config를 통해 지역(현재 레포지토리만 적용) 혹은 전역(모든 레포지토리에 적용)으로 적용할 수 있습니다.