Project/Git, GitHub

failed to push some refs 에러 해결하기

minhi 2024. 10. 4. 11:15
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
PS C:\Users\minha\Desktop\boj-javascript> git status
On branch main
Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        deleted:    1000.js
        deleted:    1001.js
        deleted:    1008.js
        deleted:    10171.js
        deleted:    10172.js
        deleted:    10430.js
        deleted:    10869.js
        deleted:    10926.js
        deleted:    10998.js
        deleted:    11382.js
        deleted:    1330.js
        deleted:    14681.js
        deleted:    18108.js
        deleted:    2557.js
        deleted:    2588.js
        deleted:    2753.js
        deleted:    9498.js
 
Untracked files:
  (use "git add <file>..." to include in what will be committed)
        .gitignore
 
no changes added to commit (use "git add" and/or "git commit -a")
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
PS C:\Users\minha\Desktop\boj-javascript> git pull origin main
remote: Enumerating objects: 35done.
remote: Counting objects: 100% (35/35), done.
remote: Compressing objects: 100% (34/34), done.
remote: Total 34 (delta 17), reused 0 (delta 0), pack-reused 0 (from 0)
Unpacking objects: 100% (34/34), 14.32 KiB | 68.00 KiB/s, done.
From https://github.com/sminha/BOJ
 * branch            main       -> FETCH_HEAD
   f6eff1a..cd830bc  main       -> origin/main
Merge made by the 'ort' strategy.
 1000.js  |  6 ------
 1001.js  |  6 ------
 1008.js  |  6 ------
 10171.js |  4 ----
 10172.js |  5 -----
 10430.js | 10 ----------
 10869.js | 10 ----------
 10926.js |  3 ---
 10998.js |  6 ------
 11382.js |  7 -------
 1330.js  |  6 ------
 14681.js | 13 -------------
 18108.js |  6 ------
 2557.js  |  1 -
 2588.js  |  6 ------
 2753.js  |  7 -------
 9498.js  | 19 -------------------
 17 files changed, 121 deletions(-)
 delete mode 100644 1000.js
 delete mode 100644 1001.js
 delete mode 100644 1008.js
 delete mode 100644 10171.js
 delete mode 100644 10172.js
 delete mode 100644 10430.js
 delete mode 100644 10869.js
 delete mode 100644 10926.js
 delete mode 100644 10998.js
 delete mode 100644 11382.js
 delete mode 100644 1330.js
 delete mode 100644 14681.js
 delete mode 100644 18108.js
 delete mode 100644 2557.js
 delete mode 100644 2588.js
 delete mode 100644 2753.js
 delete mode 100644 9498.js
cs

 

이제 git status로 로컬 저장소의 status를 확인해보면 Changes not staged for commit 내역이 존재하지 않는다.

1
2
3
4
5
6
7
PS C:\Users\minha\Desktop\boj-javascript> git status
On branch main
Untracked files:
  (use "git add <file>..." to include in what will be committed)
        .gitignore
 
nothing added to commit but untracked files present (use "git add" to track)
cs

 

git push origin main으로 로컬 저장소의 변경 사항을 원격 저장소에 업로드하였다.

1
2
3
4
5
6
7
8
9
10
11
12
PS C:\Users\minha\Desktop\boj-javascript&gt; git push origin main
Enumerating objects: 12done.
Counting objects: 100% (12/12), done.
Delta compression using up to 8 threads
Compressing objects: 100% (10/10), done.
Writing objects: 100% (10/10), 1.65 KiB | 141.00 KiB/s, done.
Total 10 (delta 1), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (1/1), completed with 1 local object.
remote: This repository moved. Please use the new location:
remote:   https://github.com/sminha/boj-javascript.git
To https://github.com/sminha/BOJ.git
   cd830bc..a044d07  main -&gt; main
cs