2012-05-13 19 views
26

jednocześnie ciągnąc do mojego repozytorium git z naszym centralnym serwerze, to błąd:nie można wyciągnąć, git nie można rozwiązać ORIG_HEAD referencyjnej

$ git pull origin master 

From http://aaa/repo 
* branch   master  -> FETCH_HEAD 
error: unable to resolve reference ORIG_HEAD: No such file or directory 
fatal: Cannot lock the ref 'ORIG_HEAD'. 

Próbowałem git GC (z --prune = teraz) i szuka podobny błąd, niestety bez powodzenia.

+0

Być może uważasz, że oznaczenie pytania Briana jest poprawną odpowiedzią, skoro ma o wiele więcej głosów? –

Odpowiedz

82

Miałem ten problem, a ja go rozwiązałem, usuwając plik .git/ORIG_HEAD, a następnie wykonując polecenie ponownie. Plik .git/ORIG_HEAD miał 0 bajtów zamiast odniesienia do git, które miał zawierać, więc po prostu się go pozbyłem.

+0

Jakieś pomysły, które powodują ten problem? – earthmeLon

+0

@earthmeLon Nie jestem pewien. Może problem z systemem plików. –

+0

Usunięcie tego również naprawiło denerwujące hasło w każdym push/pull – RayLoveless

9

Sprawdź w artykule "git remote prune origin" pod numerem w "git pull fails “unalble to resolve reference” “unable to update local ref”".

Jeśli masz .git/rebase-merge, należy rozważyć usunięcie go (jak w "git rebase and deleted rebasing branches causing “Interactive rebase already started” error message")

sprawdzenie również zawartość .git/HEAD, jak w this issue.

Jeśli jest to korupcja repo pewnego rodzaju (patrz „Git corrupt master branch”), spróbuj najpierw ponownie sklonować repo i ponownie zastosować bieżące zmiany na szczycie tej repo (poprzez git format-patch jeśli trzeba)

+1

Dzięki, niestety żadna z wymienionych poprawek nie zadziałała, więc musiałem ponownie sklonować i zastosować poprawkę. – vvondra

8

Ta odpowiedź nie rozwiązuje problemu PO, ale rozwiązuje podobną.

Miałem podobny problem (mam error: cannot lock ref ... is at ... but expected ...), ale to dlatego, że były dwa oddziały w repo o tej samej nazwie, ale o innej sprawie. Może ta odpowiedź może pomóc ludziom, którzy tu przybyli, nie byłem w stanie znaleźć odpowiedzi gdzie indziej. Usunąłem jedną z gałęzi, a następnie usunąłem odpowiednie odniesienie z: .git/ref/.../branch_name, a następnie git pulled. Dzieje się tak dzięki temu, że pracuję w systemie plików niewrażliwym na wielkość liter, podczas gdy dwie gałęzie zostały wciśnięte w system plików wrażliwy na wielkość liter.

Na przykład dwa rozgałęzienia to BRANCH1 i branch1 i oba znajdują się pod pilotem origin. Najpierw usuń jedną z gałęzi, na przykład BRANCH1. Następnie usuń jego ref:

rm .git/refs/remotes/origin/BRANCH1 

Następnie git pull, i powinno być w porządku.

+0

To pomogło mi. Dzięki za publikację. – dima

1

Ten plik jest tworzony, gdy git pull w repozytorium, aby nie git pull w tym samym repozytorium więcej niż te w czasie i zostanie usunięty, gdy proces się zakończy. Jeśli proces zginie lub zostanie zombie, plik nie zostanie usunięty i musisz ręcznie sprawdzić, czy proces git nadal istnieje. Jeśli ten proces nie istnieje, musisz usunąć plik i ponownie spróbować ponownie git pull.

Powiązane problemy