git pull이 "참조를 확인할 수 없습니다" "로컬 참조를 업데이트 할 수 없습니다"실패


606

git 1.6.4.2를 사용하면 시도 할 git pull때이 오류가 발생합니다.

error: unable to resolve reference refs/remotes/origin/LT558-optimize-sql: No such file or directory
From git+ssh://remoteserver/~/misk5
 ! [new branch]      LT558-optimize-sql -> origin/LT558-optimize-sql  (unable to update local ref)
error: unable to resolve reference refs/remotes/origin/split-css: No such file or directory
 ! [new branch]      split-css  -> origin/split-css  (unable to update local ref)

시도 git remote prune origin했지만 도움이되지 않았습니다.


답변:


929

다음을 사용하여 로컬 저장소를 정리하십시오.

$ git gc --prune=now
$ git remote prune origin

남자 git-gc (1) :

git-gc - Cleanup unnecessary files and optimize the local repository

git gc [--aggressive] [--auto] [--quiet] [--prune=<date> | --no-prune]

       Runs a number of housekeeping tasks within the current repository, such as compressing file revisions
       (to reduce disk space and increase performance) and removing unreachable objects which may have been
       created from prior invocations of git add.

       Users are encouraged to run this task on a regular basis within each repository to maintain good disk
       space utilization and good operating performance.

남자 자식 원격 (1) :

git-remote - manage set of tracked repositories

git remote prune [-n | --dry-run] <name>

           Deletes all stale remote-tracking branches under <name>. These stale branches have already been
           removed from the remote repository referenced by <name>, but are still locally available in
           "remotes/<name>".            

96
왜 이것이 작동합니까? 해결되는 문제는 무엇입니까?
Ikke

5
두 번째 명령은 나를 위해 일했습니다. 분명히 방금 만든 원격 지점에 대한 참조가 손상되었습니다. 어떻게 된 것인지 잘 모르겠지만 간단한 수정이 기뻤습니다. 감사합니다 Vitek!
JGTaylor

1
이것은 완벽하게 작동했습니다! 또한 이것이하는 일과 왜 작동했는지에 대한 설명을 좋아합니다. 감사!
ArielSD

4
git remote prune origin로컬 작업 복사본 또는 원격 저장소 에서 명령이 실행됩니까?
user1438038

3
@ user1438038 분기를 제거하지 말고 로컬 작업 복사본에서 원격 참조 만 업데이트해야합니다. 자세한 정보는 여기에 있습니다 : stackoverflow.com/questions/20106712/…
Zengineer

606

나에게도 일어났다. 제 경우에는 나쁜 심판이 주인이었고 다음과 같이했습니다.

rm .git/refs/remotes/origin/master
git fetch

이것은 git이 ref 파일을 복원하게했습니다. 그 후 모든 것이 다시 예상대로 작동했습니다.


1
나는 똑같은 일을했고 내 문제를 해결했다. 메모장 ++에서 파일을 열 때 파일이 명확하게 손상되었습니다.
theMayer

83
master
bia.migueis

6
@ bia.migueis : 실수로 마스터를 제거해도 손상되지는 않습니다. 다음 패치도 업데이트됩니다.
naught101

2
하위 모듈 인 경우 참조를 찾기가 약간 까다로울 수 있습니다. 먼저 .git폴더가 아닌지 확인 하여 파일이 아닌지 확인 ls -la하여 파일 .git파일 의 내용을 참조하여 참조가 있는 실제 .git 폴더를 찾으십시오. .git내 경우의 파일 내용 : gitdir: ../.git/modules/my-submodule-name
CCoder

1
작년에 두 번이 문제를 해결하기 위해 다시 왔으며 이것이 실제로 작동하는 유일한 수정입니다.
테드

131

이것은 나를 위해 일했습니다.

git gc --prune=now

5
이것은 효과가 있었다. 하루를 구 해주셔서 감사합니다! @Bernd 명령에 대한 가능한 설명이 있습니까?
nashcheez

자식 GC의 문서는 여기에
BigRon

1
나도 일했다. 실행할 필요가 없습니다git remote prune origin
Airwavezx

87

나를 위해 폴더에서 오류가 발생하는 파일을 제거했습니다 .git/refs/remotes/origin/.


그랬어! 그러나 호기심에서이 오류가 발생한 이유를 알고 있습니까? (모든 것이 잘 작동하고 갑자기 언젠가이 오류가 발생했습니다). 또한 파일을 삭제하면 어떻게 해결되었는지 알고 있습니까?
Shreyans

이 문제도 잘 해결되었습니다. 솔직히 말해서 오류가 발생한 원인을 모르겠습니다. 내 생각에 폴더의 파일 중 하나가 동기화되지 않았다고 생각했습니다. 내가 찾은 다른 수정 프로그램 중 어느 것도 나를 위해 일하지 않았기 때문에 이것을 최후의 수단으로 사용했습니다.
Brian van Rooijen

잘 했어! 하나의 파일 만 삭제하고 다시 가져 오면 문제가 발생한 모든 파일을 삭제해야합니다 (오류 메시지에 따라).
Rayee Roded

1
가능한 원인 중 하나는 필자가 대답 한대로 시스템 충돌 일 수 있습니다 . 많은 Git GUI 응용 프로그램은 정기적으로 리포지토리에서 Git을 실행하고 (상태를 새로 고침) Git이 참조로 조작하는 동안 시스템 충돌이 발생하면 NULLs로 다시 쓰여질 수 있습니다 .
David Ferenczy Rogožan

53

시도 해봐:

git gc --prune=now

git remote prune origin

git pull

26
이것은 저자의 질문에 대답 할 수 있지만, 설명 할 단어 및 / 또는 문서 링크가 부족합니다. 원시 코드 스 니펫은 주변에 문구가 없으면별로 도움이되지 않습니다. 좋은 답변을 작성하는 방법이 매우 도움 이 될 수도 있습니다. 답을 수정하십시오.
Roy Scheffers

정확히 요점. 코드를 올바르게 작성하는 것만으로는 충분하지 않습니다. 나는 설명이 희망
Musikero31

1
git gc --prune = now는 불필요한 파일을 삭제하면서 로컬 저장소를 업데이트합니다. 그것은 나를 위해 잘 작동합니다.
Vasyl Gutnyk

44

다음 명령을 실행하십시오.

rm .git/refs/remotes/origin/master

git fetch

git branch --set-upstream-to=origin/master

만약을 위해 .git/refs/remotes/origin/master, 당신이 무엇인지 알아야 할 필요가 있다면 , Git ReferencesRemotes 섹션을 읽을 것 입니다.


1
.git / refs / remotes / origin / branchName이 무엇인지 설명 할 수 있습니까? 이 솔루션은 저에게
효과적입니다

44

참조가 깨질 수있는 방법을 추가하고 싶습니다.

가능한 근본 원인

내 시스템 (Windows 7 64 비트)에서 BSOD 가 발생 하면 저장된 참조 파일 중 일부 ( BSOD 가 발생 했을 때 현재 열려 있거나 쓰여질 가능성이 있음)가NULL 문자 (ASCII 0) .

다른 사람들이 언급했듯이, 수정하려면 유효하지 않은 참조 파일을 삭제하고 리포지토리를 다시 가져 오거나 다시 잡아 당기면됩니다.

오류: cannot lock ref 'refs/remotes/origin/some/branch': unable to resolve reference 'refs/remotes/origin/some/branch': reference broken

솔루션 : 파일 삭제%repo_root%/.git/refs/remotes/origin/some/branch


1
Windows 10 64 비트의 동일한 시나리오-BSOD가 발생할 때 git repo에서 작동합니다. error: cannot lock ref 'refs/remotes/origin/master': unable to resolve reference 'refs/remotes/origin/master': reference broken. git pull첫 번째 파일을 삭제 한 후 시도한 결과 fatal: update_ref failed for ref 'HEAD': cannot lock ref 'HEAD': unable to resolve reference 'refs/heads/master': reference broken. 두 번째 파일 git pull origin master을 삭제 한 후 성공했습니다.
cjmcdonn

39

나는이 같은 문제가 있었고 오류가 발생한 파일로 이동하여 해결했습니다.

\repo\.git\refs\remotes\origin\master

이 파일은 null로 가득 차서 github의 최신 참조로 바꿨습니다.


2
같은 문제가 있었지만 파일 .git/refs/remotes/origin/master이 비어있었습니다. 제거하여 문제를 해결했습니다.
zinovyev

38

필자의 경우 디렉토리 아래의 모든 참조 제거 파일을 삭제 한 후에 문제가 해결되었습니다 .git.

메시지를 보면 삭제해야 할 파일 (특히)을 알려줍니다.

삭제할 파일은 아래에 .git/refs/remotes있습니다.

방금 모든 파일을 삭제하고 gc prune을 실행했습니다.

git gc --prune=now

그 후 모든 것이 잘 작동합니다.


제 경우에는 .git / refs / remotes를 삭제 한 다음 서버를 업데이트하고 푸시하면 작동합니다.
Faraz Ahmed

감사합니다. 내 경우에는 방금 refs / remotes / origin / feature에서 파일을 삭제
했으며

26

설명 : 로컬 참조가 업데이트되지 않고 존재하지 않는 참조를 가리키고 있지만 원격 저장소 (Github / bitbucket) 분기가 제거 된 것으로 보입니다.

이 문제를 해결하려면 다음을 수행하십시오.

git fetch --prune
git fetch --all
git pull

추가 정보 -Github 설명서 에서 참조 :

git- fetch-다른 저장소에서 객체 및 참조 다운로드

--all 모든 리모컨을 가져옵니다.

--prune 가져 오기 후에 원격에 더 이상 존재하지 않는 원격 추적 분기를 제거합니다.


1
이것은 나를 위해 일한
Onengiye 리처드에게

1
고마워, 그것은 나를 위해 일했다.

17

git fetch --prune 나를 위해이 오류를 수정했습니다.

[marc.zych@marc-desktop] - [~/code/driving] - [Wed May 10, 02:58:25]
[I]> git fetch
error: cannot lock ref 'refs/remotes/origin/user/janek/integration/20170505': 'refs/remotes/origin/user/janek/integration' exists; cannot create 'refs/remotes/origin/user/janek/integration/20170505'
From github.com:zooxco/driving
 ! [new branch]            user/janek/integration/20170505 -> origin/user/janek/integration/20170505  (unable to update local ref)
From github.com:zooxco/driving
[marc.zych@marc-desktop] - [~/code/driving] - [Wed May 10, 02:58:30]
[I]> git fetch --prune
 - [deleted]               (none)     -> origin/user/janek/integration

그러나 원격에서 문제가되는 분기가 삭제되었다고 가정합니다.


귀하의 예는 불완전한 것 같습니다 --prune. 볼 수 있는 것을 보여주지 않습니다 . 또한 proTip : 예제를 붙여 넣은 후 쓸모없는 암호 프롬프트를 제거하십시오.
MarkHu

당신은 절대적으로 맞습니다-fetch 명령의 출력을 중단했지만 예제에 넣었습니다. 비밀번호 프롬프트를 제거하는 팁도 감사합니다!
marczych

11

Vojtech Vitek 또는 Michel Krämer 의 답변을 적용한 후에도 "로컬 참조를 업데이트 할 수 없습니다"라는 오류가 다시 발생 하면 로컬 AND 마스터 리포지토리에 잘못된 참조가있을 수 있습니다.

이 경우 두 사이를 당기거나 밀지 않고 두 수정을 적용해야합니다 ...

rm .git/refs/remotes/origin/master
git fetch
git gc --prune=now
git remote prune origin

나를위한 영구적 인 해결책은 푸시 / 풀 전에 두 수정을 모두 적용 한 후에 만 ​​달성되었습니다.


1
고마워 'master'를 실패한 지점으로 교체했습니다. 예 : rm .git / refs / remotes / origin / develop
Damien Sawyer

1
정말 도와 주셔서 감사합니다.
naffiq

1
이것은 나를 위해 일했다
14:52에 Jeeevan

10

이 문제는 매우 짧게 말하면, 로컬에 원격 장치에 대한 정보가 있고 누군가 원격 장치를 변경하고 변경 사항을 비 동기화하는 사람이있을 때이 문제가 발생합니다.

누군가 원격 지점을 삭제하고 같은 이름으로 다시 만들었 기 때문에이 문제가 발생했습니다.

이러한 문제를 해결하려면 원격에서 가져 오기 또는 가져 오기를 수행하십시오.

git remote prune origin

또는 GUI를 사용하는 경우 원격에서 가져 오기를 수행하십시오.

여기에 이미지 설명을 입력하십시오



3

이 시도:

git pull origin Branch_Name

Branch_Name, 현재있는 지점입니다.

만 수행하면 git pull생성 된 다른 모든 분기 이름도 가져옵니다.

당신이 이것을 얻는 이유는 다음과 같습니다.

! [new branch]      split-css  -> origin/split-css  (unable to update local ref)

2

나에게 로컬 브랜치라는 이름이 feature/phase2있었고 원격 브랜치의 이름은 feature/phase2/data-model입니다. 이름 충돌이 문제의 원인이되었으므로 로컬 지점을 삭제했습니다 (유지해야 할 것이 있으면 이름을 바꿀 수 있습니다)


여기에 같은 문제 - 우리는 (-과 맥을 PC에 근무 아니라 하나의 이름이, 다른되지 대문자로 된) 발견하기가 까다로 만든 맥 / PC 케이스 명명 문제였다
락스 테디

2

만약 git gc --prune=now 나던 도움 당신. (나 같은 불운)

내가 한 일은 로컬에서 프로젝트를 제거하고 전체 프로젝트를 다시 복제하는 것입니다.


이것은 "오류 메시지가있어서 새 컴퓨터를 샀습니다"라는 접근 방식입니다.
Stephan Vierkant 2018 년

2

타워를 사용하고 있으며 어떤 이유로 폴더 이름이 .git/refs/remotes/origin/Github입니다. 소문자로 변경 .git/refs/remotes/origin/github하면 문제가 해결되었습니다.


1

나는 같은 문제가 있었다. 나는 다음 단계를 따른다

1) 문제가있는 지점을 다른 지점으로 전환

2) 그 지점을 삭제

3) 다시 체크 아웃하십시오.

참고 :-커밋되지 않은 변경 사항을 숨기고 다시 되돌릴 수 있습니다.



0

작곡가 업데이트와 동일한 문제가있었습니다. 그러나 저에게는 작곡가 캐시를 지우고 공급 업체 폴더의 내용을 삭제 한 후에 만 ​​작동했습니다.

rm -rf vendor/*
git gc --prune=now
git pull
composer clear-cache
composer update my/package

0

git bundle생성 된 파일 에서 복제하려고 할 때이 문제가 발생했습니다. 리포지토리를 복제 할 수 없기 때문에 다른 답변 중 아무것도 작동하지 않았습니다 (따라서 git gc파일 제거 / 편집은 문제가되었습니다).

그러나이 문제를 해결하는 또 다른 방법이 있습니다. 파일의 소스 파일은 다음 .bundle으로 시작합니다.

# v2 git bundle
9a3184e2f983ba13cc7f40a820df8dd8cf20b54d HEAD
9a3184e2f983ba13cc7f40a820df8dd8cf20b54d refs/heads/master
9a3184e2f983ba13cc7f40a820df8dd8cf20b54d refs/heads/master

PACK.......p..x...Kj.0...: (and so on...)

vim으로 네 번째 줄을 제거하면 문제가 해결되었습니다.


0

SourceTree를 사용하는 동안이 문제가 발생했습니다. 나는 다시 당기려고 노력했다. 분기를 너무 빨리 전환 (체크 아웃)하고 있다고 생각합니다. :).

저의 저장소는 명백한 손상없이 상대적으로 협조적 이었기 때문에 제 상황은 포스터와 약간 다릅니다.


0
 # remove the reference file of the branch "lost"
 rm -fv ./.git/refs/remotes/origin/feature/v1.6.9-api-token-bot-reader

 # get all the branches from the master
 git fetch --all

 # git will "know" how-to handle the issue from now on
 #     From github.com:futurice/senzoit-www-server
 # * [new branch]      feature/v1.6.9-api-token-bot-reader ->
 # origin/feature/v1.6.9-api-token-bot-reader

 # and push your local changes
 git push

0

리포지토리를 삭제하고 동일한 이름으로 만들 때 동일한 문제에 직면했습니다. 아래처럼 원격 URL을 재설정 할 때만 작동했습니다 .

git remote set-url origin [GIT_REPO_URL]

원격 URL을 확인하십시오.

git remote -v

이제 모든 명령이 정상적으로 작동합니다.


0

오늘 문제가 발생했습니다.

문제 해결 방법 : Windows 서버에서 SourceTree를 사용하여 관리자 권한으로 실행할 수 있습니다. 도메인의 Windows Server 2012 R2에서 Atlassian Source Tree 2.1.2.5의 "로컬 참조를 업데이트 할 수 없습니다"라는 문제가 해결되었습니다.

이 상황을 너무 복제 할 수 있으면 권한 문제로 인해 문제가 발생한 것입니다. 근본 원인을 찾아서 찾아내는 것이 좋습니다. 일부 파일은 다른 사용자가 소유 한 것일 수 있습니다. 그렇지 않은 경우 부작용이 있습니다. SourceTree를 나머지 영원 동안 관리자로 실행해야합니다.


글쎄, 나는 이것을 추천하지 않을 것이다. 잘못된 권한을 가진 더 많은 파일이 생깁니다. 그리고 관리자로서 저장소 파일을 사용하여 조작하는 모든 것을 실행해야합니다. 처음에 단순히 권한을 수정하는 것이 좋지 않습니까?
David Ferenczy Rogožan

네가 옳아. 그러나 관리자 권한으로 작동시킨 후에 만 ​​권한 문제가 있음을 알았습니다. 그래서 이것은 내 진단 절차의 한 단계였으며 완벽한 해결책은 아닙니다.
Lionet Chen

확실한. 그러나 많은 사용자가 실제로 결과를 모른 채 솔루션으로 답변을 취할 수 있습니다. 제안 된 솔루션으로 권한 수정을 추가하는 것이 좋습니다.
David Ferenczy Rogožan

0

이 문제를 일으킬 수있는 특정 사례를 기록하십시오.

어느 날 나는 원격에 "feature"브랜치를 가지고있는 동안 "feature / subfeature"라는 브랜치를 푸시했다.

그 작업은 내 측에서 아무런 오류없이 잘 작동했지만 동료가 지점을 가져 오거나 가져 오면 모두 동일한 오류 메시지가 나타납니다 unable to update local ref.cannot lock ref 'refs/remotes/origin/feature/subfeature .

이것은 featureremote ( git push --delete origin feature) 에서 branch를 삭제 하고 git remote prune origin동료의 저장소에서 실행 하여 해결되었습니다.* [pruned] origin/feature .

그래서 내 추측은 git의 내부 폴더 (.git / ...)에 ref git fetch를 만들려고 했지만 이미 ref 가 있었기 때문에 폴더를 만들지 못했습니다 .subfeaturefeaturefeature


0

Mac의 개발자가 지점 이름에 ">"보다 큰 지점을 가진 지점을 만들 때이 문제가 발생했습니다.

이로 인해 TeamCity 및 SourceTree를 실행하는 로컬 Windows 기반 컴퓨터에서 문제가 발생했습니다. BitBucket은 아무런 문제없이 통과시킵니다.

사용자를 해결하려면 분기를 제거하고 다시 작성하십시오. 좋았고 쉬웠습니다.


-1

동일한 msg가 있지만 디렉토리가 있으면 끌어 오기 실패한 msg가 있습니다.

git --prone도 도움이되지 않았습니다. 원격으로 작성된 디렉토리와 이름이 같은 파일이 있음이 밝혀졌습니다.

.git \ logs \ refs \ remotes \ origin으로 이동하여 로케일 파일을 지우고 다시 잡아 당겼습니다.

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