[GIT]non-fast-forward 에러

박민하·2022년 6월 13일
0

ERROR & DEBUG

목록 보기
5/30
post-thumbnail

🚫 현재 브랜치의 끝이 리모트 브랜치보다 뒤에 있으므로 업데이트가 거부되었습니다.

  예전에 이런 error를 많이 만들어 봤는데, 당시에는 발생 원인도 모르고 어떻게 해결해야 할지 잘 몰라서 git push -f origin <브랜치명> 으로 강제 push를 날렸더랬다... 물론 push는 됐지만 좀 더 안전한 방식을 찾다가 Learn Git Branching 사이트에서 예시를 풀다가 방법을 알아냈다!

  일단 원인은 원격 저장소와 로컬 저장소간의 버전이 다르면 push가 거부당한다. pull 안받은 상태에서 새로운 branch를 만들고 작업을 했거나, branch 작업 중에 main branch를 pull하고 branch와 merge를 안했거나... 아무튼 원격과 로컬의 상태가 다를 경우 이런 일이 발생한다.

  예시를 만들다가 master을 main으로 못바꾸긴 했는데, 바꾸고 다시 하기에는 좀 그래서 그냥 올린다.

❗️ solution1 : pull --rebase

  원격 저장소가 minha.mdtest_pull만 있을 때 clone을 받고 에서 test.py라는 파일을 만들었다. 하지만 로컬 저장소의 내용이 바뀔 동안 원격 저장소에도 test_push라는 파일이 만들어지는 update가 발생했다. 두 저장소 간의 버전이 달라졌다. 이 때 push를 하면 non-fast-forward error가 발생한다. 이를 해결하기 위해서 pull --rebase 명령어를 사용해봤다.

  push 성공.

❗️ solution2 : pull

  그럼 pull만 하면 어떻게 될까?

  원격 repository에서 merge_test.py라는 파일을 만들고, 로컬 repository에는 merge.py라는 파일을 만들었다. 이 때 push를 하면,

  git pull origin main을 한다.

  이후에 다시 push를 하니 원격 repository에도 잘 반영이 된걸 볼 수 있다.

❓solution1과 2의 차이점

  나타난 결과물은 동일해서 무슨 차인지 모를 수 있다. rebase 유무를 직관적으로 이해할 수 있도록 Learn Git Branching 사이트에서 테스트해봤다.

1. pull --rebase

2. pull

profile
backend developer 🐌

0개의 댓글