2023. 3. 21. 16:10ㆍ개발공부 기강잡자/Git
git pull을 하려니
fatal: Need to specify how to reconcile divergent branches.
오류가 발생했다. 처음에는 main과 새로 생성한 branch의 head 가 달라서 그런가 해서 merge도 해봤지만 오류가 해결이 안됐다.branch를 새로 생성해서 작업하면서 오류가 발생한 것 같다.
문제가 발생하기 전 어떤 작업을 했냐면
- main에서 새로운 파일들을 commit 함
- push를 하기 전에 원격저장소의 데이터를 가져오기 위해 git pull을 명령했더니 다음과 같은 에러가 발생했다.
- 새로운 branch가 추가됐다면
pull
을 하기 전 어떤 병합 전략을 사용할지 설정해줘야한다.
pull 전략
git pull
은 원격 저장소에서 로컬 저장소로 파일을 가져와 자동으로 병합을 실행한다.git fetch
는 원격저장소의 내용을 가져오지만 로컬 데이터와 병합하지는 않는다. (-> 병합을 원한다면 fetch이후 merge를 수행하면 된다.)
따라서 💡git pull = git fetch + git merge
👉 fetch로 원격저장소의 데이터를 가져온 후 - 'FETCH HEAD'의 위치로 원격과 로컬저장소를 merge한다.기본 설정으로
git pull
을 수행하면 pull을 받을 때마다 merge가 발생한다. 이는 불필요한 commit이 생겨 혼동을 발생시킬 수 있다.
해결 방법
git config pull.rebase true
: rebase후 pull- rebase : 새 브랜치가 시작된 분기점 commit을 기준 브랜치의 가장 최근 commit으로 변경하는 작업
git config pull.rebase false
: rebase 없이 pullgit config pull.ff only
: fast-forward일 때만 pull 허용- fast-forward
- 로컬 저장소에만 새로운 commit이 있고 원격 저장소에는 없는 경우 👉 pull을 받아올 필요가 없다.
- 원격 저장소에만 새로운 commit이 있고 로컬 저장소에는 없는 경우 👉 원격 저장소에서 가져와야하기 때문에 pull을 해야한다.
👉 만약 원격저장소에 새로운 commit이 있는데 git pull을 하지 않고 로컬저장소에 새로운 commit이 생긴다면 git pull 할 수 없다.
--global
을 추가하면 모든 레포지터리에 대해 전역으로 지정할 수 있다.
✔️ 이 중 한가지 설정을 하면 문제를 해결할 수 있다.
(rebase는 git history가 깔끔해질 수 있지만, 부주의하게 사용할 경우 별도의 알림 없이 git history를 영구적으로 변경할 수 있기 때문에 ff-only 방식을 더 추천한다고 한다.)
git config pull.ff only
로 설정
--
참고
'개발공부 기강잡자 > Git' 카테고리의 다른 글
[Git] branch 이름 변경하기 (0) | 2023.03.21 |
---|---|
[Git - 지옥에서 온 git] 5일차 - 원격 저장소 remote repository (0) | 2022.08.11 |
[Git - 지옥에서 온 git] 4일차 - git의 원리 공부 (merge/conflit/3-way merge) (0) | 2022.08.09 |
[Git - 지옥에서 온 git] 4일차 - git의 원리 공부 (reset/checkout) (0) | 2022.08.09 |
[Git - 지옥에서 온 git] 4일차 - git의 원리 공부 (branch와 HEAD) (0) | 2022.08.09 |