[Git] git push를 하려 할 때 '[rejected] main -> main (fetch first) error: failed to push some refs to' 에러가 난다

선영·2022년 11월 1일
1

Git/Github

목록 보기
3/8

🧨 문제


JS튜토리얼을 공부하고 cli에 git push origin main 명령어를 쳤을때 아래와 같은 에러가 발생했다.

개인프로젝트 변경사항을 이미 PR한 브랜치에 추가 commit하려할 때 같은 에러가 났다. 다만 힌트가 아래와 같았다. 아마 원격 브랜치가 아직 머지되지 않아서 인 것 같다.

hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
// 힌트: 현재 분기의 끝이 뒤에 있기 때문에 업데이트가 거부되었습니다. 
//힌트: 원격 대응. 원격 변경 사항 통합(예: 힌트: 다시 누르기 전에 'git pull...'을 누르십시오. 
//힌트: 자세한 내용은 'git push --help'의 'Note about fast-forward'를 참조하십시오.

🤔 원인


깃의 원격저장소와 현재 로컬저장소가 동기화되어 있지 않기때문에 나타나는 문제이다.

🙌 해결과정


원격저장소와 로컬저장소를 아래 코드로 동기화 시켜주면 된다.

// git pull --rebase [원격저장소별칭] [브랜치] * --rebase옵션: log가 더 깔끔해진다.
git pull --rebase origin main

그런데, git clone도 원격 저장소의 프로젝트 내용을 가져오는 명령어인데 git pull과 무슨 차이가 있는 것일까?

  • git clone처음프로젝트에 투입될 때 사용돼야 한다. 로컬저장소의 내용이 원격 저장소의 내용과 일치해지기 때문이다.
  • git pull은 기존에 작업했던 내용은 유지하면서 최신 코드로 업데이트 할 수 있다. 단, 원격 저장소의 내용을 가져와서 현재 브랜치와 병합(merge)해주기 때문에 commit을 미리 하지 않으면 덮어쓰기 에러가 발생할 수 있다.
    예를 들어, 원격 저장소의 메인브랜치에 작업내용 'a, b, c, d'가 있고 로컬저장소의 현재 작업브랜치엔 'c, e'를 작업해두었다면, git pull명령어를 사용했을때 메인브랜치에서 'a, b, c, d'을 가져왔음에도 c는 변경내용에 포함되지 않는다.
    만약 c 내용이 메인브랜치와 작업브랜치에서 각각 다르다면 충돌이 발생한다. 이 때는 직접 충돌 처리를 해주어야 한다.

☑️ 참고


profile
Superduper-India

0개의 댓글