평화롭게 Git으로 팀프로젝트 관리를 하던 와중 이런 에러가 발생했습니다.
! [rejected] master -> master (fetch first)
error: failed to push some refs to '<Git 레포지토리명>'
성질이 급한 나머지 구글링을 통해 강제로 push를 시도했는데요..
git push origin +master
git push origin -master --force
.. 등의 커맨드로 강제 푸시가 가능합니다.
프로젝트 초기 단계라서 별 문제는 없었지만 찜찜해서 나중에 에러의 원인을 찾아봤습니다.
에러 발생 이유는 콘솔에 적힌 그대로 fetch를 하지 않아서입니다. fetch는 원격 저장소의 브랜치에 생긴 변경 사항을 찾아내는 작업입니다(fetch change). 그 후 merge를 통해 fetch한 변경 사항과 본래 내용을 병합해줘야 합니다. 똑같은 파일에 대해 내용이 다른 conflict가 발생한다면 git에서 어떤 내용을 반영할지 결정할 수 있습니다. 아니면 pull을 통해 fetch+merge를 동시에 할 수 있습니다. 이러한 정상적인 병합 과정이 끝나면 push가 가능해집니다.
git fetch origin
git merge origin/master
//
git pull origin master
->
commit, push
규모가 큰 프로젝트에서 귀찮다고 push --force를 떄려버리면 커밋이 완전히 얽히는 불상사가 발생할 수 있겠죠?