[Git, Github] error: src refspec main does not match any 완벽 해결
오랜만에 깃헙에 소스 좀 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/