fatal: Need to specify how to reconcile divergent branches.
git pull을 하려고 하니 fatal: Need to specify how to reconcile divergent branches.
오류가 발생했다.
직역하자면 "서로 다른 분기를 조정하는 방법을 지정해야 한다"라는 뜻으로, git pull을 했을 때 pull 방식을 명시하라는 에러가 뜬다.
분기 처리가 정상적으로 되지 않아, pull 옵션을 설정해야 하는 것이다.
찾아보니, 새로운 branch가 추가됐다면 pull을 하기 전에 어떤 병합 전략을 사용할 지 설정해줘야 한다고 한다.
git pull
은 원격 저장소에서 로컬 저장소로 파일을 가져와 자동으로 병합을 실행한다.git fetch
는 원격 저장소의 내용을 가져오지만 로컬 데이터와 병합하지는 않는다.따라서 git pull = git fetch + git merge
이다.
fetch로 원격 저장소의 데이터를 가져온 후, -'FETCH HEAD'
의 위치로 원격과 로컬 저장소를 merge 한다.
기본 설정으로 git pull을 수행하면 pull을 받을 때마다 merge가 발생하는데, 이는 불필요한 commit이 생겨 혼동을 발생시킬 수 있다.
pull 하려는 원격 저장소의 branch와 로컬 저장소의 브랜치가 fast-forward 관계일 때만 pull 허용
fast-forward
- 두 branch가 fast-forward 관계라는 것은 둘 중 하나를 의미한다.
- 두 branch가 갈라진 commit을 기준으로
- 로컬 저장소에만 새로운 commit이 있고, 원격 저장소에는 없다.
- 원격 저장소에만 새로운 commit이 있고, 로컬 저장소에는 없다.
git config pull.rebase true
: rebase 후에 pull 한다.git config pull.rebase false
: rebase 없이 pull 한다.rebase: 새 branch가 시작된 분기점 commit을 기준 브랜치의 가장 최근 commit으로 변경하는 작업
로컬 branch의 시작점을 원격 branch의 마지막 commit으로 옮기는 식으로, 그 과정에서 conflict가 발생할 경우 이를 해결해줘야 한다.
git history가 깔끔해진다는 장점이 있지만, 부주의하게 사용할 경우 별도의 알림 없이 git history를 영구적으로 변경할 수 있기 때문에 ff-only 방식을 더 추천한다고 한다.