2012-05-13 1 views
26

lösen, während sie in meine git-Repository von unserem zentralen Server ziehen, diese Fehler aufgetreten:Kann nicht ziehen, git kann nicht Bezug ORIG_HEAD

$ 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'. 

ich git gc versucht habe (mit --prune = jetzt) ​​und suchen nach ein ähnlicher Fehler, leider ohne Glück.

+0

vielleicht könnten Sie Brians Frage als richtige Antwort markieren, da sie viele weitere Stimmen hat? –

Antwort

82

Ich hatte dieses Problem, und ich löste es, indem ich die Datei .git/ORIG_HEAD entfernte und dann den Zug erneut machte. Die .git/ORIG_HEAD-Datei war 0 Bytes anstelle der Git-Referenz, die es enthalten sollte, also habe ich es einfach losgeworden.

+0

Irgendeine Idee, was dieses Problem verursacht? – earthmeLon

+0

@earthmeLon Ich bin mir nicht sicher. Vielleicht ein Dateisystemproblem. –

+0

Das Entfernen dieser auch behoben die lästige Passwortabfrage auf jedem Push/Pull – RayLoveless

9

Überprüfen Sie die git remote prune origin erwähnt zusätzlich der git gc --prune=now in "git pull fails “unalble to resolve reference” “unable to update local ref”".

Wenn Sie eine .git/rebase-merge haben, sollten Sie es zu entfernen (wie in "git rebase and deleted rebasing branches causing “Interactive rebase already started” error message")

prüfen auch der Gehalt an .git/HEAD, wie in this issue.

Wenn dies eine Repo Korruption irgendeine Art ist (siehe „Git corrupt master branch“), versuchen Sie zunächst Ihre Repo wieder zu klonen, und wieder anwenden, um Ihre aktuellen Änderungen an der Spitze des Repo (durch git format-patch, wenn Sie benötigen)

+1

Danke, leider hat keiner der erwähnten Fixes funktioniert, also musste ich den Patch neu klonen und anwenden. – vvondra

8

Diese Antwort löst das Problem des OP nicht, löst aber ein ähnliches Problem.

hatte ich ein ähnliches Problem (Ich habe error: cannot lock ref ... is at ... but expected ...), aber es war, weil es mit dem gleichen Namen in der Repo zwei Zweige waren, aber mit unterschiedlichem Fall. Vielleicht könnte diese Antwort Leuten helfen, die hierher kommen, ich konnte anderswo keine Antwort finden. Ich löschte einen der Zweige, und löschte dann die entsprechende Referenz aus: .git/ref/.../branch_name, dann Git gezogen. Dies geschieht, weil ich an einem Dateisystem ohne Unterscheidung von Groß- und Kleinschreibung arbeite, während die beiden Zweige auf einem Dateisystem mit Groß- und Kleinschreibung ausgeführt wurden.

Zum Beispiel sind die beiden Zweige BRANCH1 und branch1, und sie sind beide unter origin remote. Löschen Sie zuerst einen der Zweige, z. B. BRANCH1. Dann entfernen Sie die ref:

rm .git/refs/remotes/origin/BRANCH1 

Dann git pull, und es sollte in Ordnung sein.

+0

Dies half mir. Danke fürs Schreiben. – dima

1

Diese Datei wird erstellt, wenn Sie git pull in einem Repository, um nicht git pull im gleichen Repository mehr als diejenigen zu der Zeit und es wird gelöscht, wenn der Prozess abgeschlossen ist. Wenn der Prozess stirbt oder ein Zombie wird, wird die Datei nicht entfernt und Sie müssen manuell prüfen, ob der Git-Prozess noch existiert. Wenn der Prozess nicht existiert, müssen Sie die Datei löschen und erneut versuchen, git pull.