failed to push some refs 에러 해결하기
failed to push some refs 에러
프로젝트에서 변경 사항 add, commit 후 push를 하려고 하니 아래와 같은 에러가 발생하였다.
1 2 3 4 5 6 7 8 9 | PS C:\Users\minha\Desktop\boj-javascript> git push origin main To https://github.com/sminha/BOJ.git ! [rejected] main -> main (fetch first) error: failed to push some refs to 'https://github.com/sminha/BOJ.git' hint: Updates were rejected because the remote contains work that you do hint: not have locally. This is usually caused by another repository pushing hint: to the same ref. You may want to first integrate the remote changes hint: (e.g., 'git pull ...') before pushing again. hint: See the 'Note about fast-forwards' in 'git push --help' for details. | cs |
이때 refs는 reference의 줄임말로 커밋을 가리키는 포인터를 의미한다.
즉 원격 저장소에 커밋을 push하는 데 실패했다는 것인데,
hint를 읽어보니 원격 저장소의 작업 내용 중 로컬 저장소에 반영되지 않은 것이 있어
push하기 전, 원격 저장소의 변경 사항을 로컬 저장소에 병합해야 한다는 것 같다.
먼저 현재 로컬 저장소의 status는 다음과 같다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
| cs |
루트 디렉토리에 있던 파일들을 새로운 디렉토리로 이동시키면서 기존 파일들이 삭제되었고
원격 저장소로는 새로운 디렉토리 자체를 commit하여 기존 파일 삭제 내역은 Changes not staged for commit에 남아있다.
사실 git status에서는 deleted라고 표시되지만 엄밀히 말하면 파일의 위치를 이동시킨 것뿐이었기에 기존 파일들이 그대로 들어있는 새로운 디렉토리 자체를 commit하면 기존 파일 삭제 내역까지 자연스레 반영될 거라고 생각했던 것 같다.
그러나 원격 저장소에는 루트 디렉토리에 있던 파일들이 그대로인 상태에서 새로운 디렉토리만 추가되었기에..
원격 저장소의 루트 디렉토리에 있는 기존 파일들은 GitHub에서 직접 삭제하였다.
...
즉, 원격 저장소와 로컬 저장소의 변경 내역은 동일하지만 각자 이루어지기만 했을 뿐 서로 공유되지 않은 상태였다.
에러 해결하기
git pull로 원격 저장소의 최신 변경 사항을 로컬 저장소에 병합하였다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
| cs |
이제 git status로 로컬 저장소의 status를 확인해보면 Changes not staged for commit 내역이 존재하지 않는다.
1 2 3 4 5 6 7 |
| cs |
git push origin main으로 로컬 저장소의 변경 사항을 원격 저장소에 업로드하였다.
1 2 3 4 5 6 7 8 9 10 11 12 |
| cs |