새로운 레포지토리를 생성 혹은 포크하여 커밋할 경우 push에서 막히는 경우가 있다. 해결 방법에 대해 알아보자.
error: src refspec master does not match any
error: failed to push some refs to 'https://github.com/사용자명/레포지토리명.git'
일반적으로 위와 같은 메시지를 만난다. 해당 에러메시지를 구글링해보면 대개 다음과 같은 방법을 추천한다.
터미널을 통해 해당 working directory로 이동
git init
git add .
git commit -m "message"
git remote add origin "github.com/yout_repo.git"
git push -u origin master
출처 : 데빗의 블로그
내 경우에는 전혀 working하지 않았다. 패스.
git checkout -b "master"
git push origin master
출처 : HANUL's BLOG, kimiszero.log
"master" 브랜치를 새로 만들어주는 방법이다. 몇몇 분들은 이 방법으로 성공하셨다고 하셨지만, 내가 원하는 결과가 나오진 않았다. 다만 이 방법에서 힌트를 얻어 문제를 해결했다. 아래서 자세히 설명하겠다.
git push origin main
git pull origin main
방법 2는 새로운 브랜치를 만듦으로서 master branch가 매치되지 않아 발생한 위 오류를 해결한다. 위 오류가 master branch가 없어서 발생되었다는 점은 pull을 시도해보면 더 명확히 알 수 있다. 터미널에 git pull origin master를 입력할 경우 아래와 같은 에러 메시지가 뜬다.
fatal: couldn't find remote ref master
즉 master 이름을 가진 브랜치가 없는 상태이다. 이 경우 두가지 상황을 가정할 수 있다.
1. master 역할의 디폴트 브랜치가 없다.
2. master 역할의 디폴트 브랜치가 다른 이름으로 존재한다.
레포지토리가 있는 상황에서 브랜치가 없는 건 불가능하다고 생각했고, 자연히 2번을 가정하고 생각했다. 결국 2번의 상황에서 방법 2를 사용하면 디폴트 브랜치에 커밋하는 것이 아니라 새로 만든 이름만 'master'인 브랜치에 커밋하는 것이기에 내가 원하는 해결 방법이 아니었다.
몇번 더 구글링을 하다가 방법 2의 원글 작성자인 HANUL님 블로그 포스팅을 보게 되었다. 포스팅에 따르면 깃헙 디폴트 브랜치 명이 master에서 main으로 변경되었다고 한다. 즉 push를 master 브랜치가 아닌 main 브랜치에 해주면 해결되는 간단한... 문제였던 것이다.
다만 아직 꽤나 많은 레포지토리의 디폴트 브랜치 명이 master이니 해당 레포지토리의 branch에 들어가 디폴트 브랜치명을 확인해보는 게 좋다.