git pull을 하려고 하면 pull 방식을 명시하라는 에러가 뜬다.
git pull은 git fetch와 merge를 합친 명령어이다. 그 중 merge의 방식을 명시하라는 에러인 것 같다. 각 옵션의 의미를 알아보고, 설정까지 해보자.
기존 pull의 경우, pull을 받으면 불필요한 merge commit이 생성된다. 마치 3-way merge와 같은 모양새다. (아래 그림에서의 빨간색 commit이 바로 불필요한 merge commit이다.)
이 방식이 세 가지 옵션 중 첫번째에 해당된다.
pull 하려는 원격저장소의 브랜치와 로컬저장소의 브랜치가 fast-forward 관계일 때만 pull을 허용한다.
두 브랜치가 fast-forward 관계라는 건 둘 중 하나를 의미한다.
두 브랜치가 갈라진 commit을 기준으로
첫번째 경우는 pull을 받아올 필요가 없으므로 두 번째의 경우에만 pull이 가능하다는 뜻이 된다.
그럼 만약 원격저장소의 새로운 commit이 존재하는데 git pull을 하지 않은 상태에서 로컬저장소에 새로운 commit을 했다면, git은 pull을 허용하지 않을 것이다.
pull 시에 rebase를 사용하면 아래와 같이 동작한다.
rebase란? 새 브랜치가 시작된 분기점 commit이 존재한다. 이 분기점을 기준 브랜치의 가장 최근 commit으로 변경하는 작업.
git config pull.ff only
GIT Git pull 전략 (default, —ff -only, —rebase)
Why You Should Use git pull —ff-only | sffc’s Tech Blog