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을 미리 하지 않으면 덮어쓰기 에러가 발생할 수 있다.git pull
명령어를 사용했을때 메인브랜치에서 'a, b, c, d'을 가져왔음에도 c는 변경내용에 포함되지 않는다.