예전에 이런 error를 많이 만들어 봤는데, 당시에는 발생 원인도 모르고 어떻게 해결해야 할지 잘 몰라서 git push -f origin <브랜치명>
으로 강제 push를 날렸더랬다... 물론 push는 됐지만 좀 더 안전한 방식을 찾다가 Learn Git Branching 사이트에서 예시를 풀다가 방법을 알아냈다!
일단 원인은 원격 저장소와 로컬 저장소간의 버전이 다르면 push가 거부당한다. pull 안받은 상태에서 새로운 branch를 만들고 작업을 했거나, branch 작업 중에 main branch를 pull하고 branch와 merge를 안했거나... 아무튼 원격과 로컬의 상태가 다를 경우 이런 일이 발생한다.
예시를 만들다가 master을 main으로 못바꾸긴 했는데, 바꾸고 다시 하기에는 좀 그래서 그냥 올린다.
원격 저장소가 minha.md
랑 test_pull
만 있을 때 clone을 받고 에서 test.py
라는 파일을 만들었다. 하지만 로컬 저장소의 내용이 바뀔 동안 원격 저장소에도 test_push
라는 파일이 만들어지는 update가 발생했다. 두 저장소 간의 버전이 달라졌다. 이 때 push를 하면 non-fast-forward error가 발생한다. 이를 해결하기 위해서 pull --rebase
명령어를 사용해봤다.
push 성공.
그럼 pull만 하면 어떻게 될까?
원격 repository에서 merge_test.py
라는 파일을 만들고, 로컬 repository에는 merge.py
라는 파일을 만들었다. 이 때 push를 하면,
git pull origin main
을 한다.
이후에 다시 push를 하니 원격 repository에도 잘 반영이 된걸 볼 수 있다.
나타난 결과물은 동일해서 무슨 차인지 모를 수 있다. rebase 유무를 직관적으로 이해할 수 있도록 Learn Git Branching 사이트에서 테스트해봤다.