programing

Git Pull에서 Git 오류 발생(로컬 참조를 업데이트할 수 없음)

muds 2023. 5. 1. 22:04
반응형

Git Pull에서 Git 오류 발생(로컬 참조를 업데이트할 수 없음)

지점 마스터만 있으며 "git pull"을 시도할 때마다 이 오류가 발생합니다.

error: Couldn't set refs/remotes/origin/master
From /var/lib/git/xxx/project
 ! a0f80ea..49177a3  master     -> origin/master  (unable to update local ref)

그리고 "git pull origin master"를 실행하면 다음과 같이 됩니다.

error: Couldn't set ORIG_HEAD
fatal: Cannot update the ref 'ORIG_HEAD'.

나는 검색해봤지만 왜 그런지 찾을 수 없습니다.

SourceTree에서 풀을 수행할 때 팀과 저는 로컬 ref를 업데이트할 수 없는 이 오류에 부딪혔습니다.

2020년 업데이트: 아래 @Edward Yang의 답변, 이 답변에 대한 @Bryan의 의견, 그리고질문/답변을 모두 실행해야 할 수도 있습니다.git gc --prune=now그리고.git remote prune origin전자만 실행하는 것은 항상 저에게 효과가 있었지만, ppl의 응답에 따르면 두 가지 모두 오류의 다른 원인을 해결하기 위해 필요하다고 생각합니다.

사용한 항목:

git gc --prune=now

이렇게 하면 문제를 해결해야 하는 중복 참조 개체가 제거됩니다.

다음은 참조 및 가지치기에 대해 자세히 알아볼있는가지 링크입니다.

이번 주의 중요한 일

과장된 문서.

참고 문헌

나는 아래와 같이 해결했습니다.

git remote prune origin

commande와 함께 gitbach line commande를 합니다.git update-ref로컬 지점의 참조를 업데이트하려면:

$ git update-ref -d refs/remotes/origin/[locked branch name]

그런 다음 을 사용하여 당깁니다.$ git pull

[locked branch name]커밋 ID의 불일치로 인해 오류가 발생하는 분기의 이름입니다.

문제

Windows 사용자는 종종 이 문제를 겪을 수 있습니다.

git pull 

다음과 같은 오류가 표시됩니다.error: cannot lock ref unable to update local ref

원인

원인 a) 처음부터 슬래시까지(또는 끝까지) 이름이 대문자와 소문자로만 다른 여러 분기가 있습니다.

Branch name clashing (upper/lower case)
#######################################

# Example 1)
#############################
feature/releasecandidate/fix123
feature/releaseCandidate/improveFeature789
------------------------
               ^
  Identical from beginning up to a slash (here the 2nd one)
  except for the marked letter, where the upper/lower case differs




# Example 2)
#############################
releaseBranch
releasebranch
-------------
       ^
  Identical from beginning to the end
  except for the marked letter

원인 b) Linux에서도 문제: 한 분기는 슬래시 경계를 가진 다른 분기의 접두사입니다.

Prefix with slash-boundary
#######################################

# Example 1) - also a problem on linux
#############################
feature/release2021
feature/release2021/fixIssue07
                   ^
              slash boundary

# Example 2)
#############################
feature/release2022
feature/Release2022/fixIssue99
        ^          ^
  differing case   slash boundary
 (problem on 
   windows)

해결책

원인을 제거합니다(위의 정확한 원인 참조).

# inspect your branches, to see if you have the upper/lower case problem
git ls-remote --heads YOUR-GIT-URL

예를 들어, 분기 이름 지정 정책을 만듭니다(예: 모두 소문자로 표시). 마지막 슬래시 앞에 있는 문자는 소문자로 표시).아니면 위반을 감지하는 스마트 후크도 있습니다.(그러나 참고:a) 문제는 Linux가 아닌 Windows에만 있습니다.

배경

에서 이러한 : 1 및 2를 Windows의 Windows에서 (1과 에 입니다..gitfolder

# inspect the files/folders under
.git/refs/remotes/origin/

그리고 Cause a)에서는 창이 대문자와 소문자의 차이를 구분하지 못해 git on 창이 미쳐 버립니다.

원인 b)에서는 폴더를 가질 수 없습니다(예:feature/release2021/ ()을 가진 경우feature/release2021).

해결 방법

원인을 제거할 때까지 종종 효과가 있는 단기 해결 방법은 다음과 같습니다.

git pack-refs --all

# delete the contents of .git/refs/remotes/origin/*  
rm -rf .git/refs/remotes/origin/*

git pull; git pull; git pull   # all good? yes!

git 저장소 루트 폴더에서 다음 명령을 사용해 보십시오.

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

rm .git/refs/remotes/origin/master

나한테 효과가 있어요!

직접 답변

git remote prune origin
rm .git/refs/remotes/origin/master
git fetch
git pull origin master

위의 명령을 단계별로 실행

Bitbuck Repo에서 로컬 복사본으로 가져오려고 하는 동일한 오류 메시지를 발견했습니다.는 한 는 또브랜마명하는나git pull origin master이 오류 메시지로 이어짐

From https://bitbucket.org/xxx
 * branch            master     -> FETCH_HEAD
error: Couldn't set ORIG_HEAD
fatal: Cannot update the ref 'ORIG_HEAD'.

솔루션은 다음과 같습니다.

  1. git reflog .
  2. git reset --hard <numnber> 커밋으로 합니다.
  3. git pull origin master again without . 오류가 .

Windows의 경우 이 정도면 충분합니다.

git pack-refs --all

합니다.git pull저장소를 생성한 사용자와 동일한 사용자입니다.파일 권한이 잘못되었습니다.

여기서 무슨 일이 일어났습니까?되었으므로 를 할 때git pull실패합니다.git는 분기를 찾을 수 없습니다.

git remote prune origin

는 이 를 실행합니다.git pull한 번

- 안제 - 실십시오로 실행해 .--dry-run을 위한 은 option for safety.

저에게 효과가 있었던 것은 다음과 같습니다.

git config --global fetch.prune true

이제 자동으로 제거가 계속 실행됩니다.

이것은 저에게 완벽하게 효과가 있습니다.

rm -rf .git/packed-refs .git/rr-cache

리포지토리를 다시 복제하고 손상된 프로젝트에 .git 폴더를 복사합니다.

다음을 사용하여 지점의 로컬 참조를 제거했습니다.

git branch -d -r REPO/.git/refs/remotes/origin/BRANCHNAME

그럼 제가 가져올 수 있습니다.

아니면 더 근본적으로

rm -rf REPO/.git/refs/remotes/origin

이것도 매번 작동합니다.

이는 매우 틈새 시장일 수 있지만, MacBook Pro의 Parallels VM에서 Windows를 실행하고, MacOS와 공유하는 VM의 디스크에 로컬 저장소를 저장합니다.

Windows VM에 있는 저장소에서 Mac 앱에 파일을 열면 "로컬 참조를 업데이트할 수 없습니다" 오류가 발생할 수 있습니다.이 경우 해결책은 파일을 닫거나 Mac 앱을 종료하는 것입니다.

.git/logs/refs/refs/remotes/origin/[잠긴 지점 이름] 파일 제거

이것은 대소문자를 구분하지 않는 파일 시스템을 사용하는 OSX에서 발생했습니다.어떻게든 다른 개발자가 이름은 같지만 대소문자가 다른 지점을 밀어냈습니다.My-Branchmy-branch.

나는 이미 가지고 있었습니다.My-Branch을 하고 때 " to ref오류가 했습니다. 이 "complete"라는 것을 생각하기 일 것입니다.My-Branch==my-branch.

우리는 Github을 사용하기 때문에 Github의 GUI를 통해 브랜치 중 하나를 삭제함으로써 문제를 해결할 수 있었습니다.

git pull origin <branch_name_you_are_currently_at>그 나뭇가지만 당기면 됩니다.병합 충돌이 발생하거나 발생하지 않을 수 있습니다.문제를 해결하고 커밋합니다.그것은 나에게 효과가 있었다.

저도 같은 오류가 있었습니다. git desktop app에서 꺼내는 중이었습니다.그래서 저는 도스 명령 창에서 업데이트를 시도했지만 같은 문제가 발생했습니다.

그런 다음 "gitgc --prune=now" 솔루션을 사용해 보았습니다.

gitgc --prune= now :이것은 제가 직면하고 있던 위의 문제를 해결했습니다.깃 이슈

감사해요.

최근 암호를 변경한 경우 Windows(윈도우) 및 Linux 로그인을 통합하는 고급 기능이 있는 경우에도 이 오류가 발생할 수 있습니다.

PC 사용자로부터 말하기 - 재부팅.

솔직히, 저한테는 효과가 있었어요.저는 부패라고 생각했던 이상한 두 가지 문제를 이런 식으로 해결했습니다.

저도 같은 오류가 있었습니다. Eclipse 내에서 업데이트를 하다가 많은 오류가 발생했습니다.그래서 저는 도스 명령 창에서 업데이트를 시도했지만 같은 문제가 발생했습니다.

그런 다음 "gitgc --prune=now" 솔루션을 사용해 보았습니다. 이것은 파일이 refs 디렉토리에 잠겨 있다는 메시지를 제공했습니다.

이클립스는 "refs" 디렉토리에 있는 무언가를 잠갔음에 틀림없습니다.
제가 찾은 해결책은 간단히 이클립스를 닫는 것이었습니다.그런 다음 "git PULL" 명령을 사용하여 DOS에서 저장소를 업데이트했고 모든 것이 정상적으로 작동했습니다.

잠긴 지점 파일을 삭제하여 수정했습니다.조잡하게 보일 수도 있고, 왜 작동했는지 모르겠지만, 제 문제를 해결했습니다(즉, 당신이 받고 있는 것과 동일한 오류).

삭제됨:.git/refs/remotes/origin/[locked branch name]

그리고는 그냥 달렸습니다.

git fetch

Git 파일이 자동으로 복구되었고, 완전히 복구되었습니다.

디스크가 꽉 찼을 때 데비안 서버에서도 같은 문제가 발생했습니다.장치에 남아 있는 공간이 없으므로 임시 파일을 만들 수 없습니다.파일 몇 개를 청소한 후에, 그것은 잘 해결되었습니다.

나를 위한 이 일

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

단일 명령 솔루션 [리눅스/배시 사용자용]

  1. 파일 소유권을 변경하여 권한을 변경합니다.

sudo chown username -R .git

('사용자 이름'으로 대체)

파일의 소유자가 sudo인 경우 sudo를 사용합니다.

  1. 파일을 삭제하는 것도 문제를 해결할 수 있습니다.

sudo rm .git/logs/refs/remotes/origin/master

Git Bash를 관리 cd to 폴더, Git add. Git commit -m "당신의 메시지" Git push 그는 이제 내장된 자격 증명을 사용하거나 사용자 이름/pw를 요청합니다. 내장된 자격 증명 또는 사용자 이름/pw가 작동하지 않으면 PAT를 생성하고 자격 증명을 요청하는 창을 닫습니다.

언급URL : https://stackoverflow.com/questions/10068640/git-error-on-git-pull-unable-to-update-local-ref

반응형