git pull 시 발생하는 warning 해결하기(Need to specify how to reconcile divergent branches)

이은지·2022년 7월 31일
25

git 댕고수🐶

목록 보기
4/5
post-thumbnail

git pull을 하려고 하면 pull 방식을 명시하라는 에러가 뜬다.
git pull은 git fetch와 merge를 합친 명령어이다. 그 중 merge의 방식을 명시하라는 에러인 것 같다. 각 옵션의 의미를 알아보고, 설정까지 해보자.

❗️기존 pull 방식

기존 pull의 경우, pull을 받으면 불필요한 merge commit이 생성된다. 마치 3-way merge와 같은 모양새다. (아래 그림에서의 빨간색 commit이 바로 불필요한 merge commit이다.)

이 방식이 세 가지 옵션 중 첫번째에 해당된다.

✅ git pull --ff-only

pull 하려는 원격저장소의 브랜치와 로컬저장소의 브랜치가 fast-forward 관계일 때만 pull을 허용한다.

두 브랜치가 fast-forward 관계라는 건 둘 중 하나를 의미한다.

두 브랜치가 갈라진 commit을 기준으로

  • 로컬저장소에만 새로운 commit이 있고, 원격저장소에는 없다.
  • 원격저장소에만 새로운 commit이 있고, 로컬저장소에는 없다.

첫번째 경우는 pull을 받아올 필요가 없으므로 두 번째의 경우에만 pull이 가능하다는 뜻이 된다.
그럼 만약 원격저장소의 새로운 commit이 존재하는데 git pull을 하지 않은 상태에서 로컬저장소에 새로운 commit을 했다면, git은 pull을 허용하지 않을 것이다.

✅ git pull --rebase

pull 시에 rebase를 사용하면 아래와 같이 동작한다.

rebase란? 새 브랜치가 시작된 분기점 commit이 존재한다. 이 분기점을 기준 브랜치의 가장 최근 commit으로 변경하는 작업.

  • 로컬 브랜치의 시작점을 원격 브랜치의 마지막 commit으로 옮기는 식인 것 같다. 그 과정에서 conflict가 발생할 경우 이를 해결해줘야 할 듯 싶다.
  • git history가 깔끔해진다는 장점이 있지만, 부주의하게 사용할 경우 별도의 알림 없이 git history를 영구적으로 변경할 수 있기 때문에 ff-only 방식을 더 추천한다고 한다.

✅ ff-only 옵션 기본값으로 설정하기

git config pull.ff only

references

GIT Git pull 전략 (default, —ff -only, —rebase)
Why You Should Use git pull —ff-only | sffc’s Tech Blog

0개의 댓글