본문 바로가기
테크노트/github

새로운 github 레파지토리 remote 연결시 error: failed to push some refs to 에러 메시지

by 테크한스 2021. 12. 10.

우리가 시스템이라고 부르는 것은 

아마도 특별한 예외상황을 줄여 나가는 것이고 그것이 성숙한 시스템이라고 생각이 든다

 

그러나

 

몇가지 상황에 대한 github을 보자면 이런 생각이 틀렸는가라는 생각이 든다

여러 이유가 있겠지만 (master가 정치적인 용어라 main으로 바꾸니 안바꾸니 -> 이미 바뀐 상태)

처음 깃헙을 사용하는 사용자 입장에서는 아래와 같은 혼선과 삽질이 발생할 수 있어 정리를 한다.

 

(1) 깃헙에 레파지토리를 생성하고 로컬에서 내려받는 경우

 

이것은 두말나위 없이 간단하다

git clone [REPO_URL] [DIR]

git clone https://github.com/깃헙아이디/깃헙레파지토리이름.git

git clone https://github.com/git_id/sampe_repository_name.git

너무나 명확하다 

 

그런데 2번째 방법은 이런 사실을 모르면 삽질을 보장받는다

 

(2) 로컬 -> 깃헙에 remote로 레파지토리를 접근하는 경우 (로컬에 많은 소스로 인해서)

 

여기에 정석은 아래 방법이다

git clone https://github.com/깃헙아이디/깃헙레파지토리이름.git

git clone https://github.com/git_id/sampe_repository_name.git
git push -u origin main

어쩌면 대다수가 이렇게 생각할 수 도 있다

잘 되는데? 머가 문제지

 

그런데 여기서 한가지 케이스가 존재하는 것이다

 

깃헙에서 레포지토리를 신규로 생성할 시에는 다음의 2가지의 경우가 있다

 

(2-1) readme 파일을 언체크(uncheck) 하고 레파지토리를 생성하는 경우

 

레파지토리라는 장소에 아예 아무것도 없기 때문에

 

 

git remote add origin https://github.com/깃헙아이디/깃헙레파지토리이름.git

git remote add origin https://github.com/git_id/sampe_repository_name.git
git push -u origin main

 

이런 경우는 특별히 문제가 없는 것이다

 

(2-2) readme 파일을 체크(check) 하고 레파지토리를 생성하는 경우

 

 

문제는 이와 같이 레파지토리 생성시 그 장소에 readme 파일을 생성하는 경우이다

 

이 또한 git clone으로 복제해서 위에서 깃헙 레파지토리에서 아래 로컬로 부어주면 문제가 없으나

 

이 경우는 리모트 보다는 로컬에서 소스를 정리해서 올리는 경우인 경우는 리모트 보다는 로컬위주의 접근인 것이다

 

이런 경우

 

git remote add origin https://github.com/깃헙아이디/깃헙레파지토리이름.git

git remote add origin https://github.com/git_id/sampe_repository_name.git
git push -u origin main

이렇게 (2-1)과 같이 명령을 실행하면 100% 아래의 에러를 맞게 된다

 

에러는 리모트의 변화상태를 통합하기 위해 git pull 을 먼저 수행하라는 것이다

이것만으로는 (2-1)은 되는데 왜 (2-2)만 이러는 거야 라고 말할 수 있는 것이다

그 원인은 아시는 분은 알겠지만

 

이것은 처리여부 때문이다. 이것을 모르는 순간 삽질이 시작될 지도 모른다

 

이것을 회피해서는 할 수 있는 명령어는 아래의 2가지의 경우이며 선택하면 될 것이며 이 명령어의 행위는

에러의 원흉인 readme 파일을 병합해서 올릴지에 대해 강제병합 할거야 라는 명령어라고 보면 된다.

 

(추가로 그놈의 master이니 slave니 하는 것 때문에 한가지가 늘었다. git에서 새로 생성하면 기본이 master가 된다.

그러므로 명령어에 master 브랜치 이름을 main 브랜치 이름으로 변경하는 git branch -M main 명령어도 추가한다)

 

(해결 1)

git remote add origin https://github.com/git_id/sampe_repository_name.git
git branch -M main
git pull origin main --allow-unrelated-histories
git push -u origin main

(해결 2)

git remote add origin https://github.com/git_id/sampe_repository_name.git
git branch -M main
git push -u origin +main

 

 

댓글