Git 치명적 : 참조에 잘못된 형식이 있습니다 : 'refs / heads / master


101

저장소 Dropbox를 동기화하는 데 사용 하고 git있지만 지금 시도 push하면 오류가 발생합니다.

fatal: Reference has invalid format: 'refs/heads/master (MacBook-Pro's conflicted copy 2012-10-07)'

따라서 Dropbox가 충돌을 감지하고 복사본을 만든 것 같습니다. 네, 문제 없습니다. 충돌하는 파일을 삭제했습니다. 그래도 위의 자식 오류가 발생합니다.

$ git checkout master
    M   index.html
    Already on 'master'
$ git add .
$ git commit -a -m "Cleanup repo"
    [master ff6f817] Cleanup repo
    1 file changed, 5 insertions(+), 5 deletions(-)
$ git push
    fatal: Reference has invalid format: 'refs/heads/master (MacBook-Pro's conflicted copy 2012-10-07)'
    The remote end hung up unexpectedly`

이 문제를 어떻게 해결할 수 있습니까? 감사.

답변:


178

이 명령은 되돌릴 수 없기 때문에 확실하지 않은 경우 저장소를 백업하십시오.

먼저 repo 디렉토리로 이동하십시오.

cd myrepo

그런 다음 충돌하는 파일을 재귀 적으로 검색하고 삭제하십시오.

find . -type f -name "* conflicted copy*" -exec rm -f {} \;

마지막으로 git의 packed-refs 파일에서 "충돌 된"참조를 제거하십시오.

awk '!/conflicted/' .git/packed-refs > temp && mv temp .git/packed-refs

1
나는 같은 문제가 있었고 이것은 나를 위해 그것을 고쳤습니다. 감사합니다!
에릭

이것은 나에게도 해결되었습니다. 감사합니다!
cecconeurale

1
맥 OS 사용자를위한find . -type f -name "* conflicted copy*" -delete
Soyoes

42

충돌하는 파일은 여러 위치에있을 수 있습니다.

.git/logs/refs/remotes/origin/
.git/logs/refs/heads/
.git/refs/remotes/origin/
.git/refs/heads/

또는 .git하위 디렉토리의 모든 곳을 볼 수 있습니다 .find . -name '*conflicted*'

그렇지 않으면 활성 분기를 나열하고 의심스러운 항목을 git branch -a삭제 ( git branch -d)합니다.


내부의 모든 곳에 충돌하는 파일이 있습니다 .git. 나는 그것들을 모두 삭제하고 수정했습니다. 감사.
저스틴

2
@Justin 기뻐요. 이 답변이나 다른 답변으로 문제가 해결되면 수락 됨으로 표시하세요.
Marco Leogrande 2012 년

2
Mac OS X 사용 : find . -name '*conflicted*'(편집 : 형식)
xgMz 2013

1
@xgMz 감사합니다. 귀하의 솔루션에는 일반적인 유효성이 있으므로 제 답변을 업데이트하겠습니다.
Marco Leogrande 2013

1
간단한 방법 find으로 충돌하는 단일 파일을 잡고 수동으로 두 개의 mv. 천천히하고 단계별로 추론하는 것이 가장 안전한 방법입니다.
PID

8

이는 동료가 Dropbox가 업데이트되기 전에 변경 사항을 푸시하고 PC를 종료 할 때도 발생합니다.

나는 그것을 아주 간단하게 해결했다.

충돌하는 사본을 삭제했습니다. (XXXX의 충돌 사본 yyyy-mm-dd)

그리고 정상적으로 당기십시오.

내 동료가 엉망이되기 전에 변경 사항을 적용했습니다. 그리고 그는 자신의 변화를 다시 밀어 붙입니다. 이번에는 종료하지 않습니다. :)


1
나를 위해 절대적으로 완벽하게 작동했습니다 :)
thx-

1
이것은 나를 위해 일했습니다! / refs / heads 폴더에 이름에 "충돌 된 사본"이 포함 된 파일이 있고이를 삭제 한 다음 풀 / 푸시하면 모두 정상입니다. 감사!
DiscDev

7

.git 폴더에서 충돌하는 모든 파일을 삭제할 수 있었지만 더 이상 존재하지 않는 파일에 대한 오류가 계속 발생했습니다.

나를위한 수정은 .git/refs/packed_refs"충돌"텍스트가 포함 된 줄을 열고 삭제하는 것이 었습니다 .


1

나에게는 오류가 발생했습니다. fatal: Reference has invalid format: 'refs/tags/r0.2:3'

/.git/packed_refs 파일 로 이동하여 다음 줄을 삭제할 수 있습니다.refs/tags/r0.2:3

그런 다음 작동하기 시작했습니다. 하지만 처음에 왜 일어 났는지 모르겠습니다.


0

해볼 git checkout master건강한, 잘라는 이름의 지점에 얻을 첫번째.


원본 게시물의 출력을 업데이트했습니다.
저스틴

흠, full을 시도 git push origin master하고 출력을 붙여 넣어 git branch -a주세요.
찌르기

여기에 같은 오류가 있습니다 ... 시도 git branch -a하면이 오류가 발생합니다!
trusktr

문제가 원격 저장소에 있으므로 가져 오거나 체크 아웃해도 문제가 해결되지 않습니다. 위의 다른 답변은 원격에서 파일을 직접 수정하고 완벽하게 작동하는 것을 나타냅니다. 귀하의 조언은 매우 훌륭하지만 문제에 대한 답변은 아닙니다.
PID

0

같은 오류가 발생했습니다

치명적 : 참조에 잘못된 형식이 있습니다 : 'refs / heads / somebranch (1)'

다음 명령의 경우

git branch

그런 다음 명령을 사용하여 잘못된 이름 (지점 이름 다음에 (1))을 검색했습니다.

find . -name 'somebranch (1)'

그리고 다음과 같은 결과를 보여주었습니다

./.git/refs/heads/somebranch (1)

somebranch IMO 의 일부 복제 버전입니다 . 그래서 다음과 같은 find 명령을 실행하여 이것을 제거했습니다.

find . -name 'somebranch (1)' -print -exec rm -rf {} \;

그런 다음 분기 명령이 성공적으로 실행됩니다.

git branch

0

다음과 같은 유사한 오류가 발생했습니다.

fatal: Reference has invalid format: 'refs/heads/user-search-api (Sithu's conflicted copy 2016-01-08)'

.git/refs/heads/user-search-api (Sithu's conflicted copy 2016-01-08)원격 Dropbox 저장소에서 파일 을 삭제 하기 만해도 문제가 해결되었습니다.

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