SW개발

[Git] git checkout 시에 "error: pathspec 'branch_name' did not match any file(s) known to git" 해결 방법

world class product 2022. 6. 24. 19:18

간혹 git checkout 시에 "error: pathspec 'branch_name' did not match any file(s) known to git" 이라는 메시지가 발생하면서 checkout 되지 않는 경우 해결하는 방법에 대해서 기술합니다. 

 

문제 상황 설명

한 가지 문제의 원인은 다양하고, 때로는 복합적이기도 합니다. git checkout 명령을 통해서 다른 브렌치로 이동을 하고자 할 때 "error: pathspec 'branch_name' did not match any file(s) known to git" 이라는 에러가 발생하는 이유는 여러가지일 수 있습니다. 

아주 단순한 해결 방법부터 조금 복잡한 해결 방법까지 3가지 해결 방법을 제공합니다. 

 

원인1. 실제로 리모트에 없는 브렌치인 경우

가장 실수를 많이 하면서도 가장 간단한 원인으로는 실제로 리모트에 존재하지 않는 브렌치일 가능성이 있습니다. 예를 들어, 다른 작업자가 my_branch라는 브렌치를 로컬에만 생성해두고 리모트에 push하지 않았을 경우 다른 작업자가 해당 브렌치로 checkout 하려고 하면 당연히 checkout이 안 됩니다. 

이 때는, 로컬에서 생성하고 작업한 브렌치를 remote에 git push 명령을 통해서 업데이트 해주면 간단하게 해결할 수 있습니다. 

 

A 작업자

$ git push origin my_branch

A 작업자가 로컬에서 생성하고 작업한 브렌치를 git push 명령으로 업로드해줘야지만 다른 작업자가 해당 브렌치를 활용할 수 있습니다. 

 

B 작업자

$ git checkout my_branch

비로고 B 작업자는 my_branch를 remote로부터 가져올 수 있습니다. 

 

원인2. 리모트 브렌치를 가져오지 않은 경우

실제로 리모트에는 존재하는 브렌치지만 로컬에서 그 존재를 모를 경우 당연히 checkout이 안 됩니다. 이 경우는 git remote update나 git fetch -all 명령을 통해서 리모트의 브렌치 내용을 가져오면 됩니다. 

 

git remote update 명령을 통해서 새로운 브렌치 정보를 가져오는 방법

 

$ git remote update
$ git checkout my_branch

 

동일하게 git remote update 대신 git fetch -all 명령을 사용할 수도 있습니다. 

$ git fetch --all
$ git checkout my_branch

 

원인3. 리모트 설정이 올바르지 않은 경우

위의 2가지는 아주 기본적인 내용입니다. 이 페이지가 아니더라도 위와 같은 내용은 구글링을 통해서 손쉽게 해결할 수 있습니다. 그렇게 간단한 내용이라면 애초 제가 이 글을 쓰지도 않았을 것입니다. 

간혹 리모트 설정이 올바르지 못한 경우가 있습니다. 특히 swallow clone 등을 통해서 전체 저장소 내용을 가져오지 않는 경우에 이런 오류를 많이 목격했습니다. 이 때는 위의 1번과 2번 항목으로는 절대 문제가 해결되지 않습니다. 

다음의 명령을 통해서 리모트 설정을 지우고 다시 설정한 이후에 checkout 하시면 됩니다. 

1. 리모트 설정을 삭제합니다.

$ git remote remove origin

 

2. 리모터를 재정의 합니다. 

$ git remote add origin https://www.github.com/user_nane/repo_name

위의 user_name 및 repo_name은 그대로 사용하지 마시고 올바른 이름을 넣으시기 바랍니다. 만약 엔터프라이즈 버전이라면 엔터프라이즈 버전의 url을 그대로 입력해주시면 됩니다. 

 

3. git fetch 명령을 통해서 리모트의 내용을 다시 가져옵니다. 

$ git remote update
$ git checkout my_branch

혹은 "git remote update" 대신에 "git fetch -all" 명령을 입력해도 무방합니다. 

 

 

원인4. swallow clone 모드인 경우

 

간혹 git clone 시에 "RPC failed; curl 56 GnuTLS recv error (-110): The TLS connection was non-properly terminated."와 같은 에러로 clone이 완전하지 못할 때가 있습니다. 이 때는 "--depth=1" 과 같이 전체 저장소가 아닌 일부만 가져오는 경우가 있습니다. 물론, git clone 시에 시간과 공간을 절약하기 위해서 shallow clone을 사용하는 경우도 많습니다. 

이 때는 대표 브렌치(최초 main 브렌치임)만 저장소에서 가져오기 때문에 다른 브렌치에 대한 정보가 없습니다. 이 때는 "git fetch --unshallow" 명령을 통해서 저장소 전체를 가져오면 해결됩니다. 

관련된 내용은 아래의 글을 참조하시기 바랍니다. 

 

[Ubuntu] git clone 시에 "RPC failed; curl 56 GnuTLS recv error (-110): The TLS connection was non-properly terminated." 에러

개요 최근에 git clone 시에 지속적으로 에러가 발생하여 무척 성가셨습니다. 구글 검색을 통해서 시도해본 솔루션들이 연달아 실패하곤 했지요. 대부분의 솔루션들은 git config 명령을 통해서 설정

frankler.tistory.com

 

참고할만한 링크

 

Git errors: cannot checkout branch - error: pathspec 'branch_name' did not match any file(s) known to git

Sometimes after repository checkout you can encounter the error trying to switch branches: git...

dev.to

 

이상입니다.