git config pull.ff only
를 통해 pull의 기본 옵션을 ff-only로 설정해놓은 경우 발생할 수 있는 에러다.
pull하려는 원격저장소의 브랜치와 로컬저장소의 브랜치가 fast-forward 관계가 아닐 때에 발생한다. 원격저장소의 새로운 commit이 존재하는데 git pull을 하지 않은 상태에서 로컬저장소에 새로운 commit을 했다면 해당 에러가 발생할 것이다. git pull을 습관화하자!
git pull --rebase
rebase 옵션으로 pull을 진행한다.
근데 이때 rebase로 인한 conflict가 발생할 수 있다!
원격저장소의 main 브랜치와 로컬저장소의 main 브랜치가 동일한 파일을 수정한 상황을 가정하자. 해당 상황에서 우리가 마주하게 되는 에러의 순서는 아래와 같을 것이다.
- 로컬저장소에서 수정 사항을 commit 하고, push를 한다.
- 그 결과 원격저장소와 로컬저장소의 상태가 다르기 때문에 pull을 먼저 하라는 에러가 발생한다.
- 2번 에러를 해결하기 위해 pull을 하게 되면 ff 관계가 아니기 때문에 pull이 중단된다.
- 3번 에러를 해결하기 위해
git pull --rebase
를 할 경우 conflict가 발생한다.
이때 당황하지 말고 conflict가 발생한 파일을 잘 수정해주면 된다. 수정사항을 git add - git commit
하고, 그 다음 git rebase —continue
로 rebase를 마무리한다.
그럼 이제 다시 git push
를 하면 된다!
내가 로컬에서 수정하려는 파일이 원격저장소에서 다른 사람들에 의해 수정되었을 수 있으니 작업을 하기 전에는 git pull을 습관화하도록 하자. 정리하자면 원격저장소의 가장 최근 commit에서부터 브랜치를 따야 fast-forward 상태가 유지되어 해당 에러가 발생하지 않는다는 것이다. 이를 위해 시작 전에 git pull을 해야 하는 거고.
참고가 되었습니다!