경고 : 원격 HEAD는 존재하지 않는 참조를 참조하므로 체크 아웃 할 수 없습니다.


87

이것은 다른 원인에 대한 대중적인 오류처럼 보입니다.

"kiflea.git"이라는 간단한 베어 git 저장소가 있습니다. 다음과 같이 복제합니다.

git clone git://kipdola.be/kiflea.git

그런 다음 git은 다음과 같이 말합니다. warning: remote HEAD refers to nonexistent ref, unable to checkout.

그리고 예, .git 디렉토리를 제외하고 맵에 버전이 지정된 파일이 없습니다. 어쨌든, 내가해야 할 유일한 일은 :

cd kiflea
git checkout master

그리고 작동하고 모든 파일이 있습니다. 하지만 리포지토리를 복제하면 자동으로 마스터를 체크 아웃한다고 생각했는데 정확히 무슨 일이 일어나고 있으며 어떻게 수정합니까?

git checkout master비트를 수행 한 후 로컬 .git 구성 파일에 추가됩니다.

[branch "master"]
    remote = origin
    merge = refs/heads/master

이 git 저장소가 먼 과거에 svn 저장소였던 것을 아는 것은 흥미로울 것입니다.

추신 : gitweb을 사용하여 베어 저장소를 탐색 할 때 분명히 master브랜치가 있습니다. http://kipdola.be/gitweb/?p=kiflea.git;a=summary


2
무엇을 git ls-remote origin보여 주나요?
CB Bailey

checkout master비트 전후에 동일합니다 .25f600739343a7ce32d6311a1e6140870774810b refs/heads/master
skerit

1
원격 저장소가 HEAD. 직접 액세스 할 수 있습니까? 그렇다면 여기를
CB Bailey

1
저장소를 복제하고 분기를 지정하지 않으면 원격 헤드를 사용하려고합니다. 아래 답변에서 설명했듯이 어떤 분기에 직접 영향을 줄 수는 없습니다. 그러나 복제시 다른 분기를 체크 아웃하면이 검사를 피할 수 있습니다. 귀하의 경우에는 마스터가 존재하지만 원격 헤드가 다른 곳을 가리 키므로 다음을 사용하십시오.git clone -b master <url> <dir>
eckes

답변:


128

이는 warning: remote HEAD refers to nonexistent ref, unable to checkout.원격 (베어) 저장소 HEAD에 동일한 저장소의 게시 된 분기와 일치하지 않는 라는 파일의 분기 참조가 포함되어 있음을 의미 합니다.

경고는 git이 체크 아웃하지 않았다는 것을 의미합니다. 복제 된 저장소는 그렇지 않으면 괜찮습니다. git branch -a가능한 분기를 확인 git checkout the-branch-you-want하고 문제를 해결하려면 수행 하십시오 .

이것은 일반적으로 해당 파일의 기본 내용 ( .git/HEAD또는 HEAD베어 저장소의 경우 일반 )이 누군가이 저장소 ref: refs/heads/master로 이동하면 clone기본적으로 브랜치를 복제해야한다는 내용이기 때문에 발생 합니다 refs/heads/master. 기본적으로 Git은 refs/heads/접두사 없이 (즉, master기본적으로) 로컬 브랜치를 생성 합니다. 시도 git help symbolic-ref자세한 내용은.

이 상황의 문제는 Git이 원격 심볼릭 참조 를 수정하는 방법을 제공하지 않기 때문에 Git 호스팅 공급자가 구현 한 것을 사용하거나 (예 : 설정-관리자 권한이있는 경우 GitHub의 기본 분기) 또는 분기 이름을 사용해야한다는 것입니다. master기본 브랜치로 (그 심볼릭 참조의 기본값이기 때문에).

원격 git repo에 대한 셸 액세스 권한이있는 경우 기본적으로 사용하려는 브랜치 이름이 cd path/to/bare/git/repo; git symbolic-ref HEAD refs/heads/XYZ어디에 있는지 간단히 알 수 있습니다 XYZ.

이 문제를 해결하는 한 가지 방법은 커밋이없는 새 원격 git push name-of-the-remote my-special-branch-name베어 리포지토리를 생성 한 다음 단일 브랜치를 포함하는 베어 리포지토리를 생성 my-special-branch-name하지만 HEAD심볼릭 참조는 여전히를 가리키는 기본값을 포함하는 것 master입니다. 결과적으로 앞서 언급 한 경고가 표시됩니다.


20
경고는 git이 checkout. 복제 된 저장소는 그렇지 않으면 괜찮습니다. 수행 git branch -a가능한 지점과 볼 git checkout the-branch-you-want"수정"이 문제에있다.
Mikko Rantalainen 2013 년

2
적어도 하나는 사용할 때 원격 헤드 사용을 피할 수 있습니다 git clone -b master(또는 기존 분기의 이름이 무엇이든간에).
eckes 2014 년

나는 당신이 마지막 단락에서 썼던 것을 정확히했습니다. 베어 리포지토리 (gitlab 내)의 브랜치에 파일이 있지만 복제본이 비어있는 것 같습니다. {git branch -a}는 아무것도 표시하지 않습니다. {git clone -b my-special-branch-name <url>}도 작동하지 않는 것 같습니다 (원격 끝이 끊김).
Ed Randall

refs / remotes / my-special-branch-name을 refs / heads에 복사하고 HEAD를 수정하여 일치하도록 수정했습니다 (베어 gitlab repo에서). 그런 다음 -b my-special-branch-name을 사용하여 성공적으로 복제 할 수 있습니다. 그러나 "init"/ "push"주기 후에 비어있는 빈 저장소를 구성하는 올바른 방법은 무엇입니까? 그래서 clone -b에 문제가 발생하지 않습니다.
Ed Randall

1
@EdRandall cd path/to/bare/git/repo; git symbolic-ref HEAD refs/heads/XYZ여기서는 플래그 없이 수행 XYZ되는 경우 사용할 기본 브랜치 이름 입니다. 다른 문제가 있으면 질문을 댓글로 추가하는 대신 새로운 질문을하십시오. git clone-b
Mikko Rantalainen

10

더 이상 master브랜치를 사용하지 않고 로컬 및 원격 저장소에서 손실 되었기 때문에 동일한 문제가 발생 했습니다.

원격 저장소는 여전히으로 HEAD설정되어 master있으며 실제로 사용하는 원격 분기 중 하나로 변경했으며 모든 것이 잘 작동합니다.

원격 저장소에 액세스 할 수있는 경우 :

  • 당신의 remote_repo.git;
  • HEAD파일 수정
  • 변경 ref: refs/heads/masterref: refs/heads/your_branch

두 조건이 모두 가능하며, 마스터가 제거되었고 HEAD가 여전히이를 가리 키거나 HEAD가 나중에 제거 된 분기로 변경되었습니다. 나는 (마스터 작품의 체크 아웃 이후) 두 번째 옵션이 우리의 경우라고 생각합니다. @MarcoBonifazi에서이 사건은 "변화"대체 될 것이라고 broken_branch으로 refs/heads/master.
eckes 2014 년

2
파일을 편집하지 않고 이와 같이 HEAD 분기를 설정하는 "적절한"방법이 있습니까?
Ed Randall

@EdRandall cd path/to/bare/git/repo; git symbolic-ref HEAD refs/heads/XYZ여기서는 다른 주석에서 말했듯 이 플래그 없이 수행 XYZ되는 경우 사용할 기본 브랜치 이름 입니다. git clone-b
Mikko Rantalainen

7

예, 이것은 마스터와 다른 브랜치를 체크 아웃하려는 git 클론과 관련이 있습니다. 그냥 해

git clone user@git-server:project_name.git -b branch_name /some/folder

이렇게하면 브랜치 이름을 통해 정확한 브랜치를 복제하는 데 도움이됩니다.


2

이 오류가 표시되었지만-내 프로젝트는 여전히 해당 저장소에 연결되어 있습니다- git branch명령을 실행하고 적절한 분기를 git checkout *branchname확인한 다음 실행 하고 BOOM-모든 것이 잘되었습니다.


예, @Mikko는 이유가 무엇인지 설명했습니다. 체크 아웃을 건너 뛰려면 -b 옵션을 사용할 수 있습니다. (하지만 장기적으로 원격 저장소를 수정하는 것이 좋습니다!)
eckes

1

원격 저장소에 확실히 문제가 있습니다. 저장소의 새 복제본을 만들어 문제를 해결할 수 있습니다. 또한 마스터 브랜치에 새 커밋을 푸시하는 것도 작동 할 수 있습니다.


그것은 나를 위해 아무것도 해결되지 않았다 ... "HEAD 자식 푸시 -u 원점 HEAD :"나는 당신이 의미 추측
RZR

1

나는 그것이 *어떻게 든 원격 서버를 속이는 커밋 로그 의 선두라고 생각 합니다.

일부 메뉴 링크를 사용하여 저장소의 웹 인터페이스를 탐색 할 수 있지만 다른 링크 404 - Unknown commit object는 특히 요약 페이지에서 또는 이와 유사한 것으로 실패 합니다.

마지막 커밋 메시지를 수정할 수 있는지 확인한 다음 업데이트를 강제로 푸시하여 수정되는지 확인하십시오. 서버 악마에 버그가있을 수 있습니다. 문제가 해결되면 git 목록 git@vger.kernel.org (일반 텍스트 메시지 만 해당)에보고 할 가치가 있습니다.


1

베어 레포를 만들 때 동일한 문제가 발생했습니다.

리포지토리를 복제하고 로컬 마스터 브랜치를 만든 다음 마스터를 원격 리포지토리로 푸시하는 것만으로 해결했습니다.

1) 저장소 복제

$ git.exe clone --progress -v "the remote path" "my local path"

2) 로컬에서 마스터 브랜치를 만듭니다.

   $ git checkout -b master

3) 로컬 브랜치에서 커밋

$ git add readme.md 
$ git commit –m “Added readme”

4) 원격에서 로컬 마스터 푸시

   $ git push origin master

0

실제로 사용 가능한 마스터 분기가없는 경우 다음을 확인하십시오. '.git'폴더에 'packed-refs'라는 파일이있는 경우 해당 파일을 열면 나열된 모든 참조를 찾을 수 있습니다.

아래와 같은 것;

# pack-refs with: peeled fully-peeled 
e7cc58650190bd28599d81917f1706445d3c6d8b refs/tags/afw-test-harness-1.5
^cfae4f034e82591afdf4e5ed72279297d0eee618
6afe1bcfa4bd74de8e0c8f64d024e1cc289206df refs/tags/afw-test-harness-2.1
^c32f7fa495d4b44652f46c065fcd19c3acd237a6
72f2e4284dfbf27c82967da096c6664646bbdd19 refs/tags/android-1.6_r1
^50992e805e758e2231f28ec2127b57a1a9fd0ddc
0cbd528cad1cee9556098b62add993fc3b5dcc33 refs/tags/android-1.6_r1.1

그런 다음 사용하십시오.

git checkout refs/tags/xxxx

또는

git checkout 'HASH value'

필요한 버전을 확인하십시오. 감사합니다.


0

나는 그것을 수정하는 것처럼 보였다.

git checkout -b  master
git push

이렇게하면 기본 마스터가 생성되고 다른 브랜치를 체크 아웃 할 수 있습니다.


0

제 경우에는 저장소가 비어있었습니다.

git checkout --orphan master

git add some_file
git commit -m 'init'
git push origin master 

0

Gitlab의 경우 기본 브랜치 (예 :)에 있음을 보여 주더라도 master실제로는 여기에 있지 않을 수 있으며 다시 설정하여 다음과 같이 수정합니다.

  1. 새 브랜치를 만듭니다. asd
  2. 설정> 저장소> 기본 분기는 기본 분기가 master
  3. 그것을 설정 asd
  4. 다시 설정 master
  5. asd지점 삭제

완료, 이제 기본 분기는 master

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.