git pull error : 오류 : 원격 참조에 있지만 예상


227

전체 메시지 :

error: Ref refs/remotes/origin/user is at 3636498c2ea7735fdcedc9af5ab3c8689e6abe77 but expected a21359c6cc2097c85775cde6a40105f4bd7100ec
From github.com:{github project url}
 ! a21359c..6273ffc  user -> origin/user  (unable to update local ref)

3
분명히 누군가가에 의해 저장소의 기록을 다시 작성했습니다 git push --force. 실행 해보십시오 git pull --force.
xaizek

1
자식 푸시 --force과 같은 오류를 제공
산지 브 쿠마르 Dangi

5
-이 질문에 대한 대답이 오류 해결 stackoverflow.com/questions/3046436/...
산지 브 쿠마르 Dangi

답변:


225

당신은 대소 문자를 구분하지 않습니다 파일 시스템 (Windows 또는 OS X)에서 자식을 실행하는 경우이 이름은 같지만 서로 다른 대문자, 예를 들어, 두 가지가있는 경우 발생 user_model_changesUser_model_changes원격 가지 모두 같은 추적 심판이 일치합니다 .

잘못된 원격 지점을 삭제하면 (사례마다 다른 지점이 없어야 함) git remote prune origin모든 것이 작동해야합니다


대답 해줘서 고마워요. 이것은이 오류의 문제가 아닙니다. 이미이 문제에 대한 해결책을 찾았고 질문 아래에 의견을 게시했습니다.
Sanjeev Kumar Dangi

2
Mac OS X에도 도움이됩니다 (기본 파일 시스템은 대소 문자를 구분하지 않습니다).
Tammo Freese

12
예, Windows의 대소 문자 구분 문제로 인해 문제가 발생했습니다. .git\refs\remotes\origin폴더 에서 참조를 수동으로 제거한 다음 git pull다시 수정하여 수정했습니다 .
Roy Ling

그리고 .git 폴더가 어디에 있는지 모르는 사람들을 위해 .. Project / Workspace 폴더 안에 생성 될 것입니다 : D
kumar

1
이것은 git 버그입니다 (적어도 오류 메시지는 잘못되었습니다). 누군가이 버그를 git 프로젝트에보고 할 수 있기를 바랍니다. git 프로젝트에 버그를보고하는 것이 어려워 보입니다. github.com/git/git
청동 남자

190

영구 수정

git update-ref -d 이 오류의 내 인스턴스를 해결했습니다.

git update-ref -d refs/remotes/origin/user

이것은 원격에 영향을 미치지 않습니다.

필자의 경우 후속 적으로 git fetch해당 분기를 다시 가져 왔으며 git fetches / pulls 다음에 더 이상 "원격 참조가 있지만 예상"이라는 오류가 발생하지 않았습니다.

그래도 작동하지 않으면 임시 수정 사항 :

문제의 브랜치를 신경 쓰지 않으면 (예 : 원점 / 사용자가 아닌 마스터를 업데이트하려는 경우) git pull해결 방법은 관심있는 특정 브랜치를 가져 와서 병합하는 것입니다.

git fetch # may give an error for a particular branch, but other branches will still be successfully fetched
git merge origin/master

리모컨을 건드리지 않고 문제를 해결하기 때문에 이것이 수용 가능한 솔루션이어야합니다.
Cerno

52

아래의 폴더와 파일을 삭제하십시오 \.git\refs\remotes\origin. 푸쉬되지 않은 변경 사항이 없을 때 작동합니다.


원격 심판이 '포장'되어 있으므로 심판 / 원격이 아닌 경우에는 작동하지 않을 수 있습니다. @JDiMatteo의 솔루션은 여전히 ​​작동해야합니다.
Alexander Bird

2
나를 위해 일했다. 정말 감사합니다!
Swapnil Patwa

매력처럼 일했다! 감사!
Anurag S Sharma

43

문제를 해결하기 위해 이것을 실행했습니다.

git gc --prune=now

2
이것은 나를 위해 문제를 해결했습니다.
Aamir Rizwan

2
나를 위해 너무 ..-- :)
Aravind R Pillai 5

3
고마워,이 솔루션은 나를 위해 수정되었습니다. 제공 한 솔루션에 대해 좀 더 설명해 주시겠습니까?
Aamol

1
이 동기화가 아니라 캐싱을 위해 로컬 컴퓨터의 모든 정보가 삭제됩니다 그래서 기본적으로 그냥 자식 가비지 콜렉터 도구입니다
elad 실버

42

아래 두 명령을 하나씩 사용하십시오.

git gc --prune=now

git remote prune origin

문제가 해결됩니다.


1
이것은 나를 위해 작동하지만 다른 git pull을하면이 문제가 다시 나타납니다.
Jojin

@Jojin 당신과 동일합니다. 그리고 마침내 Prakash Saravanan이 제공 한 방식을 선택했습니다
xi.lin

1
이것은 git 파일을 편집하는 제안보다 높게 평가되어야합니다 :)
Mike Wise

이 솔루션 만 나를 위해 일했습니다. 감사!
insaineyesay

12

커맨드 라인에서 분기 를 제거해야 했습니다.

.git\refs\remotes\{my remote}\{**my branch**}

그런 다음 수동으로 수행하십시오.

git pull [remote_name] [branch_name]

나는 변화를 풀 수 있었다.

참고 : SourceTree 를 사용 하고 있었고 풀을 수행 할 수 없었습니다.


궁극적으로 리모콘의 이름을 변경했습니다. SourceTree 기록에 "Bitbucket / staging"및 "bitbucket / staging"이라는 두 개의 리모콘이 있지만 명령 행에 git remote -v 만 나타납니다. 그래서 Bitbucket의 이름을 bitbucket으로 바꾸고 마침내 충돌이 사라졌습니다. SourceTree 사용자에게 도움이되기를 바랍니다.
jogam5

또한 .git\packed-refs나에게 고정되기 전에 지점을 제거 해야했습니다.
Michael


5

명확한 단계

  1. 터미널에서

    cd /.git/refs/remotes/origin
    
  2. 않습니다 ls, 당신은 몇 가지 볼 지점HEAD를

  3. 문제가 있다고 생각되는 지점을 제거하십시오.

    rm branchname
    
  4. 작동하지 않으면 모든 분기 / HEAD를 삭제하십시오.

    • 당신은 당겨 싶어

그것이 효과가 있기를 바랍니다.


이것은 본질적으로 동일 git update-ref -d <branchname>합니까?
jt000

2

이것을 시도하십시오, 그것은 나를 위해 일했습니다. 터미널에서 : git remote prune origin.


2

불행히도 prune 및 reset 또는 push와 같은 GIT 명령은 작동하지 않았습니다. 정리는 한 번 작동 한 후 문제가 다시 발생했습니다.

나를 위해 일한 영구적 인 해결책은 git 파일을 수동으로 편집하는 것입니다. 프로젝트의 .git 폴더로 이동 한 다음 메모장 + +와 같은 텍스트 편집기에서 압축 파일을 엽니 다. 그런 다음 실패한 분기가있는 행으로 이동하여 해당 guid를 예상 한 것으로 업데이트하십시오.

다음과 같은 메시지가있는 경우 :

"오류 : ref 'refs / remotes / origin / feature / branch_xxx'를 잠글 수 없음 : 425ea23facf96f51f412441f41ad488fc098cf23에 있지만 383de86fed394ff1a1aeefc4a522d886adcecd79"

그런 다음 파일에서 'refs / remotes / origin / feature / branch_xxx'가있는 행을 찾으십시오. 예상되는 (2 차) one-383de86fed394ff1a1aeefc4a522d886adcecd79가있을 것입니다. 실제 (첫 번째) 것으로 변경해야합니다 (425ea23facf96f51f412441f41ad488fc098cf23).

다른 실패한 지점에 대해 반복하면 계속 진행할 수 있습니다. 때로는 다시 가져 오기 후에 이미 이미 '고정'했던 동일한 분기에 대해 반복해야했습니다. 다시 가져올 때 GIT 업데이트 GUID가 최신 GUI를 제공합니다.

어쨌든 문제는 쇼 스토퍼가 아닙니다. 지점 목록이 업데이트됩니다. 이것은 오히려 경고입니다.


1

git for-each-ref --format = '삭제 % (refname)'참조 / 원본 | git update-ref --stdin git reflog expire --expire = now-모든 git gc --prune = now


0

여기에 동일한 경우가 있지만 의견에 대해서는 아무것도 게시하지 않았습니다. 내 경우에는 하나의 분기 (마스터) 만 있고 Unix 파일 시스템 만 사용합니다.이 오류는 git fetch --progress --prune origin을 실행할 때 무작위로 발생하며 분기는 앞서 있습니다. 또는 '원산지 / 마스터'. 아무도 커밋 할 수 없으며 한 명의 사용자 만 푸시를 수행 할 수 있습니다.

참고 : acme 저장소에 서브 모듈이 있고 acme에 새로운 서브 모듈 변경 사항 (새로운 커밋)이 있습니다. 먼저 자식 서브 모듈 업데이트로 서브 모듈 업데이트를 수행해야합니다.

[2014-07-29 13:58:37] Payload POST received from Bitbucket
[2014-07-29 13:58:37] Exec: cd /var/www/html/acme
---------------------
[2014-07-29 13:58:37] Updating Git code for all branches
[2014-07-29 13:58:37] Exec: /usr/bin/git checkout --force master
[2014-07-29 13:58:37] Your branch is ahead of 'origin/master' by 1 commit.
[2014-07-29 13:58:37]   (use "git push" to publish your local commits)
[2014-07-29 13:58:37] Command returned some errors:
[2014-07-29 13:58:37] Already on 'master'
---------------------
[2014-07-29 13:58:37] Exec: /usr/bin/git fetch --progress --prune origin
[2014-07-29 13:58:39] Command returned some errors:
[2014-07-29 13:58:39] error: Ref refs/remotes/origin/master is at 8213a9906828322a3428f921381bd87f42ec7e2f but expected c8f9c00551dcd0b9386cd9123607843179981c91
[2014-07-29 13:58:39] From bitbucket.org:acme/acme
[2014-07-29 13:58:39]  ! c8f9c00..8213a99  master     -> origin/master  (unable to update local ref)
---------------------
[2014-07-29 13:58:39] Unable to fetch Git data

이 문제를 해결하려면 (내 경우에는) 분기가 원점보다 앞서 있으면 먼저 git push를 실행하십시오.


3
귀하의 답변은 로컬 커밋이 새로운 커밋 후 원산지보다 앞서 있다는 사실과 관련이 있습니다. 이것은 로컬 git commit 작업의 자연스러운 상태이며 원래 질문과 관련이 없습니다.
davient

0

나는 이것이 오래되었다는 것을 알고 있지만 내 자신의 문제가 있습니다. 소스 트리를 사용하고 있기 때문에 누군가가 새로운 브랜치를 생성하기 때문에이 오류가 발생합니다. 소스 트리는 이것에 대해 혼란스러워합니다. "원격 가져 오기 원격"콤보 상자 옆에있는 "새로 고침"버튼을 누르면 sourcetree가 지점 목록을 업데이트 한 것 같습니다. 이제 성공적으로 가져올 수 있습니다.


0

이미 원격 지점으로 푸시했지만 이전 커밋으로 재설정했기 때문에 동일한 문제가 발생했습니다.

로컬 지점을 삭제 한 다음 원점을 확인한 git checkout origin/my_branch다음 실행 하여 문제를 해결했습니다.git checkout my_branch


-1

지속적으로 검색 한 후에, 이것은 업스트림 설정 해제 / 제거를 수반하는 저에게 효과적 인 솔루션입니다

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