[git] error : src refspec main does not match any

최정우·2022년 2월 17일
0

git

목록 보기
1/1

이전 네이버 블로그에서 작성했던 글인데 같은 상황을 맞이하여 손쉽게 해결했다. 그래서 생각나서 여기에 다시 작성한다.
본문 : https://blog.naver.com/choi-ju12g/222537834999

로컬 저장소에서 Github로 push를 하는 상황에 다음과 같은 에러가 발생할 때가 있다.

다음과 같은 상황에서 해당 에러를 경험하였다.

1) 로컬디렉토리의 새파일(test)에서 git init

2) github에서 새로운 레포지토리 생성, Add Readme 추가

3) 로컬(test)에서 git remote add origin "Github 주소"

4) 로컬(test)에서 test.txt 파일 생성

5) git add test.txt

6) git commit -m "add test.txt"

7) git push origin main

에러!!

필자는 해당 에러를 아래와 같은 방식으로 해결하였다.

우선 로컬의 현재 default 브랜치 명을 보면 master이고, 깃헙의 default 브랜치 명은 main으로 되어있다. 이는 Git 2.28버젼 이후부터 default branch명을 master-> main으로 바꾸었기 때문에 별도의 세팅을 하지 않는다면 위와 같이 되어있을 가능성이 크다.

따라서, git bash(혹은 사용하는 CLI)의 default 브랜치 명을 main으로 바꿔주거나,
깃헙 레포지토리를 생성할때 default 브랜치 명을 master로 바꿔주면 된다.
물론 branch 명을 맞추기만 하고 push가 되지는 않았으나 이 작업도 필요함을 확인했기에 우선적으로 branch명을 맞춰주자.

우선 git bash의 default 브랜치 명을 바꾸는 방법을 알아보자.

1) git config --global init.defaultBranch main 명령어를 입력
2) cat ~/.gitconfig 명령어로 바뀌어있는 것을 확인

빨간 네모 부분이 master가 아닌 main으로 되어있으면 변경된 것이다.

다음은 Github 레포지토리를 만들때 branch명을 바꾸는 방법이다.
1) 새로운 레포지토리를 만들때 아래 사진의 빨간 박스 부분 settings를 클릭한다.
2) main으로 되어있는 것을 master로 바꿔주고 update 클릭

3) 다시 레포지토리 생성 창으로 돌아와보면, master로 바뀌어있는것을 확인할 수 있을 것이다.

필자는 당연히 브랜치명을 맞추었으니 git push가 문제없이 작동할 줄 알았으나 결과는 같은 에러 화면을 또 보게 되었다.

그 이유부터 말하자면 레포지토리를 만들 때 , Readme 파일을 추가했기 때문인데 최대한 설명해보겠다.

---깃헙 main 브랜치 ---- A:레포 생성 ----- B:Readme 생성 커밋 ----------

---로컬 main 브랜치 ---- A:레포 생성 ----- C:test.txt 생성 커밋 -----------

A 레포 생성은 커밋은 아니지만 이해를 돕기 위해 다음과 같이 표현하였다.

위 같은 상황에서 로컬은 B라는 커밋을 모른채로 push하려 했기때문에 에러를 출력했던 것이다.

만약 B,C의 커밋이 같은 파일을 건드렸다면 push 했을때 파일의 손상이 발생할 수 있기 때문이다.

드디어 마지막 단계다. 필자는 이를 rebase 명령어를 통해 해결하였다.

git rebase origin/main
깃헙의 main브랜치의 커밋을 로컬 main브랜치의 커밋 하위로 조정해주겠다는 의미이다. 위의 명령어를 입력하면 로컬저장소에 Readme파일이 생성되는걸 확인할 수 있고, git push origin main 도 에러없이 진행되었다.

profile
누구나 할 수 있지만 아무나 못하는 일을 하자

0개의 댓글