src refspec master does not match any 에러 해결 방법

Peniel Cho·2021년 8월 8일
1

새로운 레포지토리를 생성 혹은 포크하여 커밋할 경우 push에서 막히는 경우가 있다. 해결 방법에 대해 알아보자.

에러 메시지

error: src refspec master does not match any
error: failed to push some refs to 'https://github.com/사용자명/레포지토리명.git'

일반적으로 위와 같은 메시지를 만난다. 해당 에러메시지를 구글링해보면 대개 다음과 같은 방법을 추천한다.

구글링 방법 1

터미널을 통해 해당 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하지 않았다. 패스.

구글링 방법 2

git checkout -b "master"
git push origin master

출처 : HANUL's BLOG, kimiszero.log

"master" 브랜치를 새로 만들어주는 방법이다. 몇몇 분들은 이 방법으로 성공하셨다고 하셨지만, 내가 원하는 결과가 나오진 않았다. 다만 이 방법에서 힌트를 얻어 문제를 해결했다. 아래서 자세히 설명하겠다.

나의 해결 방법

  1. 레포지토리에 들어가 디폴트 브랜치 이름을 확인한다.
  2. git push시 master 대신 해당 디폴트 브랜치 이름(아마도 main일)을 사용한다.
git push origin main
  1. 구글링 방법 1로 해결되지 않은 분들은 아마 정상적으로 push 성공하셨을 것이다.

    만약 실패하셨을 경우, 해당 레포지토리의 디폴트 브랜치 이름으로 Pull을 시도하신 후 다시 Push 해보시길 추천한다.
git pull origin main

구글링 방법 2와의 차이점

방법 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에 들어가 디폴트 브랜치명을 확인해보는 게 좋다.

profile
#DevRel

0개의 댓글