git

[Git, Github] error: src refspec main does not match any 완벽 해결

AlgoRoot 2022. 1. 20. 13:14
반응형

 

오랜만에 깃헙에 소스 좀 push 하려고 하는데 또 이러네.. 저번에도 마주한 오류 문구라 똑같은 방법으로 했지만 되지 않았다. 

 

그 이후에도 폭풍 구글링으로 여러 방법을 써보았다. 

 

내가 시도해본 방법은 이래와 같다. 

 

 

1. 원격저장소와 로컬 저장소의 자료가 다를 때 나타날 수 있음 

따라서 pull 먼저 하고 다시 진행한다. 

 

 

2. 강제 push 해본다. 

git push -u origin +main

이 방법은 조심해야 한다. 강제 push를  하게 되면 로컬에 없고 원격에 있던 자료를 잃게 된다. 그래서 1번 방법으로 해결하는 게 낫다. 

 

 

3. git파일을 다시 삭제 후 재 진행해본다.

 

 


 

이것 저것 했는데 안되다가 혹시 몰라 push를 master로 했더니 된다.. 읭/? 

하지만 github에서는 작년 10월 이후로 Black Lives Matter 운동에 동참하며 브랜치 이름을 master 에서 main으로 바뀌었다. 

하지만 기본 로컬 스토리지 브랜치명은 반영이 안 되었던 건가..? 내 로컬 스토리지의 브랜 치명은 master였으니 말이다. 

 

로컬 저장소 브랜치명 확인을 위해서는 

# git show-ref 를 입력하면 된다.  (혹은 git branch 로도 가능) 

 

# git show-ref
efd5443191ce58a9dbbbf3ba4ba483cc4ced1a7e refs/heads/master

refs/heads/master로 되어있는 상황을 확인할 수 있다. 

 


Solution1. 터미널에서 master에서 main으로 바꾸기

 

branch 이름을 터미널에서 master을 main으로 바꾸기 위해서 아래의 명령어를 쓰면 된다.  

 

 

방법 

 

해당 local refence 터미널에서 아래 두 가지 중 한  명령어를 실행한다.  둘 다 같은 의미이다. 

 git branch -m master main

or

git config --global init.defaultBranch main

 

default banch를 master > main으로 변경함으로써 앞으로 git push 할 때 아래와 같이 입력해도 잘 될 것이다. 

 

git push origin main

 

 

Solution2.local branch name은 유지한 채로 원격 브랜치에 넣는 법 

 

soution1의 방법이 싫다면(싫을 이유는 없지만?) 혹은 안된다면, 아래와 같은 명령어로 push 해줄 수도 있다.

# git push origin HEAD:main

 

 

Solution3.git 생성 시 브랜치 네임 생성

애초에 git을 생성할 때 main으로 생성하는 방법이 있다.

git init을 생성할 때 아래의 둘 중 하나의 방법으로 생성하면 브랜치 이름이 main으로 지정이 된다. 

 

# git init --initial-branch=main

or

# git init -b main

 


 

 

Reference:

3-1 방법 https://techglimpse.com/error-src-refspec-main-does-not-match-any-git/

3-2 방법 https://develoger.kr/backend/error-src-refspec-main-does-not-match-any/

반응형