git gc fatal : bad object refs / remotes / origin / HEAD 오류를 처리하는 방법?


131

나는 오늘 Git 가비지 수집 을 실행하는 동안 이것을 무작위로 쳤다 .

$ git gc
fatal: bad object refs/remotes/origin/HEAD
error: failed to run repack

어떻게 처리합니까?

답변:


163

나는 이것의 결과를 이해하지 못하지만 이 스레드에서 제안한 것처럼 이것을 만났을 때 나는 방금했다.

$ mv .git/refs/remotes/origin/HEAD /tmp

(만약에 대비해 보관) 그리고

$ git gc

불평하지 않고 일했다. 나는 어떤 문제도 겪지 않았습니다.


6
그것은 나를 위해 일했으며 기본 브랜치를 master라는 다른 브랜치로 변경했기 때문에이 문제가 발생한 것 같습니다 develop. 일 나는에서 다시 변경하기 전에 developmaster나는 이전의 기본 분기를 삭제develop ,하지만 내 작업 디렉토리에 파일이 .git/refs/remotes/origin/HEAD여전히 가리키는되었다 refs/remotes/origin/develop더 이상 존재한다. 이 상황 에서 파일 제거가 작동했습니다.
Stavarengo

4
git prune나를 위해 일했습니다 .Git에 축적되었지만 유용한 정보가 참조하지 않는 데이터를 삭제하는 방법입니다.
Sven Malvik

:를 실행하면 내 문제 해결$ mv .git/refs/remotes/origin/HEAD /tmp $ git gc git prune
데이비드 Rauca을

2
가장 좋은 방법은 @WilQu의 답변 ( stackoverflow.com/a/49944297/660339 ) 일 것입니다. 누구든지 이것을 확인할 수 있습니까?
Ivan Perez

git gc나를 위해 일했던 것보다 .git 폴더에서 그 파일 제거
Vino

68

내가 만난 문제 ( 위의 주석 에서 @Stavarengo가 언급 한 것과 동일한 문제 )는 기본 원격 분기 ( develop내 경우)가 삭제되었지만 여전히 참조되었다는 것입니다..git/refs/remotes/origin/HEAD .

.git/refs/remotes/origin/HEAD내 편집기에서 열면 다음 과 같이 표시됩니다.

ref: refs/remotes/origin/develop

나는 조심스럽게 내 새 기본 지점에서 지점으로 편집하고 모두 잘했다 :

ref: refs/remotes/origin/master

저에게 팁을 준 단서는 달리기 git prune가이 오류를 보여 주었다는 것입니다.

> git prune
warning: symbolic ref is dangling: refs/remotes/origin/HEAD

1
그뿐만 아니라 내 수정했다
댄 Carlstedt

1
이것은 내 정확한 해결책이었습니다. 최근 기본 분기를 사용하여 변경 우리 팀뿐만 아니라 마스터 개발
jmancherje

40

Trenton의 답변을 본 후, 저는 제 모습을 .git/refs/remotes/origin/HEAD보고 그것이 현재 삭제 된 이전 브랜치를 가리키고 있음을 알았습니다.

그러나 파일을 직접 편집하는 대신 Ryan의 솔루션을 시도했습니다.

git remote set-head origin --auto

자동으로 파일을 새 브랜치로 설정하고 git gc그 후에는 정상적으로 작동했습니다.


네, 이것은 저에게 효과적입니다-제가 똑같은 시나리오에 있었기 때문입니다. git remote set-head $REMOTE --auto필자의 경우 $ REMOTE는 여러 원격 설정이 있기 때문에 기본 "원본"이 아닌 원격 별칭입니다.
Devy

29

이것이 효과가있는 것 같기 때문에 해결책은 다음과 같다고 생각했지만 실제로 문제를 해결하지 못하는 것으로 나타났습니다.

git remote set-head origin --auto

1
이 명령이 동일한 문제를 해결하는 데 도움이 된 것 같습니다. 그러나이 명령 이후에도 git prune(첫 번째 명령 출력에서 ​​권장 된대로) 사용 했기 때문에 무엇이 도움이되었는지 (첫 번째, 두 번째 또는 둘 다) 정확히 말할 수 없습니다.
Borys Pylhun

1
git remote set-head origin --auto내가 사용하지 않고 내 refs / remotes / origin / HEAD 파일 수정git prune
danio

이 오류가 발생했습니다 : error: Multiple remote HEAD branches. Please choose one explicitly, git remote set-head origin mybranch오류를 없애기 위해 ( 'mybranch'브랜치가 체크 아웃되는 동안) 사용해야했습니다 .
derekmx271

3
반대 투표는 완전한 답변이 아니며 오해의 소지가 있기 때문입니다.
Christian Vielma 2017 년

9

심볼릭 참조가 손상되었을 수있는 것 같습니다 ... 다음과 같이 기본 브랜치로 교체해보세요. 예를 들어, 내 기본 브랜치는 master입니다.

$ git symbolic-ref refs/remotes/origin/HEAD refs/remotes/origin/master
$ git fetch --prune
$ git gc

그것은 그것을 고칠 것입니다.


0

git 작업 트리를 사용하는 경우 다음 작업을 수행하고 있는지 확인하십시오.

git worktree prune

달리기 전에

git gc

작업 트리가 손상되어 손상된 작업 트리를 제거한 후 트릭을 수행하는 것 같습니다. git prune그 자체로는 작동하지 않는 것 같습니다.


0

이 문제의 원인은 Windows의 압축 폴더에서 작업했습니다. 폴더의 압축이 풀리면 팩 파일이 손상되어 존재하지 않는 분기를 정리할 수없는 것과 같은 다른 이상한 문제가 발생했습니다.

유일한 수정 사항은 작업 디렉토리를 지우고 원격 저장소를 다시 복제하는 것입니다. 운 좋게도 여전히 업데이트를 푸시하고 가져 와서 손실 된 것이 없는지 확인할 수있었습니다. 이제 모든 것이 잘되었습니다.

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