Git fatal: odwołanie ma nieprawidłowy format: „refs / heads / master

101

Używam Dropboxdo synchronizowania gitrepozytorium, ale teraz, gdy próbuję i pushotrzymuję błąd:

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

Wygląda więc na to, że Dropbox wykrył konflikt i utworzył kopię. Ok, nie ma problemu, więc usunąłem plik w konflikcie. Nadal jednak pojawia się powyższy błąd git.

$ 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`

Jak mogę to naprawić? Dzięki.

Justin
źródło

Odpowiedzi:

178

wykonaj kopię zapasową repozytorium, jeśli nie masz co do tego pewności, ponieważ te polecenia są nieodwracalne.

najpierw przejdź do katalogu repozytorium.

cd myrepo

następnie rekurencyjnie wyszukaj pliki będące w konflikcie i usuń je

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

na koniec usuń wszelkie "sprzeczne" odniesienia z pliku spakowanego-refs gita

awk '!/conflicted/' .git/packed-refs > temp && mv temp .git/packed-refs
Pas ruchu
źródło
1
Miałem ten sam problem i to rozwiązało go dla mnie. Dziękuję Ci!
erik
To też naprawiło to dla mnie. Dziękuję Ci!
cecconeurale
1
dla użytkowników find . -type f -name "* conflicted copy*" -delete
macOS
42

Plik w konflikcie może znajdować się w wielu miejscach, przyjrzałbym się:

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

Lub możesz poszukać wszędzie w .gitpodkatalogu:find . -name '*conflicted*'

Lub, w przeciwnym razie, wyświetl listę aktywnych gałęzi git branch -ai usuń ( git branch -d) wszystko podejrzane.

Marco Leogrande
źródło
Wszędzie w programie znajdują się pliki będące w konflikcie .git. Przeszedłem i usunąłem je wszystkie, i zostało to naprawione. Dzięki.
Justin,
2
@Justin Cieszę się, że mogłem pomóc. Jeśli ta lub inna odpowiedź rozwiązała Twój problem, oznacz ją jako zaakceptowaną.
Marco Leogrande
2
W systemie Mac OS X użyj: find . -name '*conflicted*'(Edycja: format)
xgMz
1
@xgMz Dzięki, zaktualizuję moją odpowiedź, ponieważ Twoje rozwiązanie ma ogólną ważność.
Marco Leogrande
1
W prosty sposób findzdobyłem pojedynczy plik powodujący konflikt i ręcznie naprawiłem problem z dwoma mv. Robienie tego powoli i krok po kroku jest najbezpieczniejszą drogą.
pid
8

Dzieje się tak również w naszym zespole, gdy mój kolega wprowadzi zmiany i wyłączy komputer, zanim Dropbox zostanie zaktualizowany.

Rozwiązałem to tak prosto.

Właśnie usunąłem kopię będącą w konflikcie. (Spójna kopia XXXX rrrr-mm-dd)

I pociągnij go normalnie.

Zauważ, że mój kolega miał zmiany przed zepsuciem. I ponownie wprowadził zmiany. Tym razem bez wyłączenia. :)

Hareen Laks
źródło
1
zadziałało dla mnie absolutnie idealnie :) thx - dla mnie dropbox utworzył dziwną nazwę pliku, która nie była zgodna z "aktualizacją"
cV2
1
To zadziałało dla mnie! W folderze / refs / heads znajdował się plik z "skonfliktowaną kopią" w nazwie, który został usunięty, następnie pull / push i wszystko jest w porządku. Dzięki!
DiscDev
7

Udało mi się usunąć wszystkie pliki będące w konflikcie z mojego folderu .git, ale nadal otrzymywałem błędy dotyczące plików, które już nie istniały.

Rozwiązaniem dla mnie było otwieranie .git/refs/packed_refsi usuwanie wierszy zawierających tekst „w konflikcie”.

Rysował
źródło
1

U mnie to dawało błąd: fatal: Reference has invalid format: 'refs/tags/r0.2:3'

Możesz przejść do pliku /.git/packed_refs i usunąć wiersz dlarefs/tags/r0.2:3

Potem zaczęło działać. Ale dlaczego tak się stało w pierwszej kolejności, nie wiem.

Rajesh Paul
źródło
0

Spróbuj jako git checkout masterpierwszy dostać się na zdrową, dobrze nazwaną gałąź.

szturchać
źródło
Zaktualizowano wynik w oryginalnym poście.
Justin
Hm, czy mógłbyś wypróbować pełną git push origin master, a także wkleić wynik polecenia git branch -a?
poke
Ten sam błąd ... próba git branch -askutkuje tym samym błędem!
trusktr
Problem występuje w zdalnym repozytorium, więc ściąganie lub wyewidencjonowywanie go nie rozwiązuje. Pozostałe odpowiedzi powyżej odnoszą się do bezpośredniego naprawiania plików na pilocie i działają idealnie. TWOJA RADA JEST BARDZO DOBRA, ale nie jest odpowiedzią na problem.
pid
0

Otrzymałem ten sam błąd

fatal: Odniesienie ma nieprawidłowy format: „refs / heads / somebranch (1)”

dla następującego polecenia

git branch

Następnie wyszukałem błędną nazwę (nazwa gałęzi, po której występuje (1)) za pomocą polecenia

find . -name 'somebranch (1)'

I pokazał następujący wynik

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

Która jest jakąś zduplikowaną wersją jakiejś branżowej IMO. Więc usunąłem to, wykonując polecenie find, a następnie usuń

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

Następnie polecenie rozgałęzienia działa pomyślnie

git branch
zeeawan
źródło
0

Napotkałem podobny błąd np

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

Samo usunięcie pliku .git/refs/heads/user-search-api (Sithu's conflicted copy 2016-01-08)w zdalnym repozytorium Dropbox rozwiązało problem.

Sithu
źródło