Git-Fehler beim Git-Pull (lokale Referenz kann nicht aktualisiert werden)

113

Ich habe nur einen Zweigmaster und erhalte diesen Fehler jedes Mal, wenn ich versuche, "git pull" zu machen:

error: Couldn't set refs/remotes/origin/master
From /var/lib/git/xxx/project
 ! a0f80ea..49177a3  master     -> origin/master  (unable to update local ref)

und wenn ich "git pull origin master" mache, bekomme ich:

error: Couldn't set ORIG_HEAD
fatal: Cannot update the ref 'ORIG_HEAD'.

Ich habe gesucht, kann aber nicht finden warum

user115561
quelle
2
Wo ist das lokale Repository? Haben Sie es als einen anderen Benutzer erstellt als den, mit dem Sie den Pull ausführen? Es klingt wie ein Dateiberechtigungsproblem.
tpg2114
Ja, Sie haben Recht, nachdem Sie gesagt haben, der Eigentümer der Projektdateien sei ein anderer Benutzer. Jetzt scheint meine Frage so dumm zu sein, aber Sie haben mir die Antwort gegeben. Bitte geben Sie eine Antwort, um sie als die beste zu wählen.)
user115561
Bitte @ tpg2114 fügen Sie dies als Antwort hinzu, um es zu
wählen

Antworten:

256

Mein Team und ich sind auf diesen Fehler gestoßen und konnten die lokale Referenz nicht aktualisieren gestoßen, da wir die Referenz , als wir SourceTree abgerufen haben.

Wir verwendeten :

git gc --prune=now

Dadurch werden doppelte Referenzobjekte entfernt, die das Problem beheben sollen.

Hier sind einige Links, über die Sie mehr über Git-Referenzen und das Beschneiden erfahren können :

Git-Tipp der Woche

Git-Prune-Dokumentation

Git Referenzen

Skipjack
quelle
1
Arbeitete auch für mich, gleiche Nachricht, Sourcetree unter Windows 7
James Westgate
2
Ich habe gerade angefangen, dieses Problem zu haben. Vielen Dank! hat perfekt funktioniert!
ddrossi93
2
Möglicherweise sind beide Befehle erforderlich : git gc --prune=now git remote prune originfrom stackoverflow.com/questions/2998832/…
bryan
1
Ich habe es versucht git remote prune originund es hat bei mir nicht funktioniert. Aber danach habe ich git gc --prune=nowes versucht und es hat funktioniert! Ich bin mir nicht sicher, ob beide in dieser Reihenfolge benötigt wurden oder nur diese.
Anurag
1
Ein weiteres kryptisches Problem gitführt zu einem hilfreichen StackOverflow-Beitrag mit einer knappen Lösung.
Ijoseph
125

Ich habe wie folgt gelöst:

git remote prune origin

Edward Yang
quelle
6
Eureka! Es hat tatsächlich funktioniert. Es hat etwas mit umbenannten entfernten Zweigen oder so etwas zu tun. Ich werde nicht versuchen, es zu erklären.
TheSoftwareJedi
8
Dies tat es für mich, git gc --prune=nowtat nichts
Josh G
3
gleich. das funktioniert bei mir. git gc --prune = hat jetzt bei mir nicht funktioniert.
Tony
16

Verwenden Sie mit gitbach line commande, um git update-refdie Referenz Ihrer lokalen Niederlassung zu aktualisieren:

$ git update-ref -d refs/remotes/origin/[locked branch name]

dann ziehen mit $ git pull

[locked branch name] ist der Name des Zweigs, in dem der Fehler aufgrund einer Nichtübereinstimmung der Festschreibungs-IDs auftritt.

T.Moez
quelle
12

Ich habe dieselbe Fehlermeldung entdeckt, die versucht, von einem Bitbuck-Repo in meine lokale Kopie zu ziehen. Es gibt auch nur einen Branchenmaster und der Befehl git pull origin masterführt zu dieser Fehlermeldung

From https://bitbucket.org/xxx
 * branch            master     -> FETCH_HEAD
error: Couldn't set ORIG_HEAD
fatal: Cannot update the ref 'ORIG_HEAD'.

Lösung wie folgt

  1. git reflog Finden Sie die Nummer des letzten Commits
  2. git reset --hard <numnber> Auf das letzte Commit zurücksetzen
  3. git pull origin master ohne fehler wieder ziehen
außerhalb der Grenzen
quelle
12

Versuchen Sie, diesen Befehl in Ihrem Git-Repository-Stammordner zu verwenden:

rm .git/logs/refs/remotes/origin/master 
Babak
quelle
Wo ist dieser Ordner unter Windows?
Kolob Canyon
Ich habe es gefunden. Es ist das Verzeichnis, in das Sie geklont haben
Kolob Canyon
9

rm .git/refs/remotes/origin/master

Es funktioniert bei mir!

Xin
quelle
8

Stellen Sie sicher, dass der Benutzer, der das ausführt, git pullderselbe Benutzer ist, der das Repository erstellt hat. Die Dateiberechtigungen sind falsch.

tpg2114
quelle
Für mich musste ich den Besitzer der Dateien in dem Repo ändern, das ich versuchte, mit Chown an den richtigen Benutzer zu ziehen. Ich denke, das haben Sie im Grunde gesagt, obwohl es mir beim Lesen nicht klar war.
Dee
Ich bin damit einverstanden. Überprüfen Sie, ob Eigentümer und Gruppe auf Benutzer eingestellt sind, die bereit sind, das Repo ".git" einzuziehen (passiert, wenn Sie einen Zweig gezogen haben, der "root" ist). In meinem Fall hat ein "sudo chown -R" den Job erledigt.
jo_
2

Dies ist mir unter OSX passiert, wo ich ein Dateisystem verwende, bei dem die Groß- und Kleinschreibung nicht berücksichtigt wird. Irgendwie hat ein anderer Entwickler einen Zweig mit dem gleichen Namen, aber einem anderen Fall geschoben: My-Branchvs.my-branch .

Ich hatte bereits My-Branchausgecheckt und bekam den Fehler "Lokale Referenz kann nicht aktualisiert werden", als ich einen Pull machte, wahrscheinlich weil das Dateisystem My-Branch== denktmy-branch .

Da wir Github verwenden, könnte ich das Problem lösen, indem ich einen der Zweige über die GUI von Github lösche.

gabrielf
quelle
In meinem Fall gehörten beide in Konflikt stehenden Zweige einem anderen Benutzer, sodass ich keinen löschen konnte. Stattdessen habe ich die Zweigreferenzdatei unter .git \ refs \ remotes gelöscht und dadurch behoben (vorübergehend - das Problem tritt jedes Mal wieder auf, wenn ich ziehe, bis der andere Benutzer einen seiner Zweige löscht).
Jana Mandic
Mein Problem war auch darauf zurückzuführen, dass die lokale Niederlassung und die Remote eine unterschiedliche Kapitalisierung hatten. Das Löschen des lokalen Zweigs mit dem obigen Befehl prune und das anschließende Auschecken vom Ursprung haben das Problem behoben
Beschreibung
1

Dieser Fehler mit (lokale Referenz kann nicht aktualisiert werden) kann auch auftreten, wenn Sie kürzlich Kennwörter geändert haben und einige ausgefallene Dinge Ihre Windows- und Linux-Anmeldungen integrieren.

Hazok
quelle
1

Klonen Sie das Repository erneut und kopieren Sie den Ordner .git in Ihr fehlerhaftes Projekt.

Gabriel Santos Carvalho
quelle
1

Von einem PC-Benutzer sprechen - Neustart.

Ehrlich gesagt hat es bei mir funktioniert. Ich habe zwei seltsame Git-Probleme gelöst, von denen ich dachte, dass sie auf diese Weise korrupt sind.

GONeale
quelle
1

Dies ist wahrscheinlich eine sehr Nischensituation, aber: Ich führe Windows in einer Parallels-VM auf meinem MacBook Pro aus, wobei meine lokalen Repos auf der Festplatte der VM gespeichert sind, die für macOS freigegeben ist.

Wenn in einer Mac-App eine Datei von einem Repo geöffnet ist, das sich auf der Windows-VM befindet, wird manchmal der Fehler "Lokale Referenz kann nicht aktualisiert werden" angezeigt. In diesem Fall können Sie die Datei einfach schließen oder die Mac-App beenden.

daGUY
quelle
1

Was ist hier passiert? Die lokalen Verweise auf Ihre Remote-Zweige wurden geändert. Daher git pullfindet git beim Ausführen keine entsprechenden Remote-Zweige und schlägt daher fehl.

git remote prune origin

Bereinigt tatsächlich diese lokalen Referenzen und führt sie dann git pullerneut aus.

Vorschlag - Bitte laufen Sie mit --dry-run aus Sicherheitsgründen

Therealprashant
quelle
0

Ich hatte das gleiche Problem auf meinem Debian-Server, da die Festplatte voll ist. Es konnte keine temporäre Datei erstellt werden, da auf dem Gerät kein Speicherplatz mehr vorhanden ist. Nach dem Bereinigen einiger Dateien hat es gut geklappt.

Fibonacci
quelle
0

Diese Arbeit für mich

rm .git/logs/refs/remotes/origin/master 
Saurabh Kumar
quelle
Ich bezweifle, dass dies hilft - oder überhaupt funktioniert. Um mich anders zu überzeugen, fügen Sie bitte eine Erklärung hinzu, wie dies funktionieren sollte und warum es bei dem Problem helfen soll. Das Hervorheben der Unterschiede zu scheinbar ähnlichen bestehenden anderen Antworten wäre ein Bonus. Besonders die von Babak.
Yunnosch
0

Ich hatte den gleichen Fehler, ich habe aus Eclipse heraus aktualisiert und viele Fehler erhalten. Also habe ich versucht, über ein DOS-Befehlsfenster zu aktualisieren, und das gleiche Problem festgestellt.

Dann habe ich die Lösung "git gc --prune = now" ausprobiert. Dies gab Meldungen aus, dass die Dateien im refs-Verzeichnis gesperrt waren.

Eclipse muss etwas im Verzeichnis "refs" gesperrt haben.
Die Lösung, die ich gefunden habe, war, Eclipse einfach zu schließen. Dann habe ich das Repository von DOS mit einem "git PULL" -Befehl aktualisiert, und alles hat gut funktioniert.

Peter Lenahan
quelle
0

Entfernen Sie die Datei .git / logs / refs / remotes / origin / [Name des gesperrten Zweigs]

Nitin Agarwal
quelle
1
Ich bezweifle, dass dies hilft - oder überhaupt funktioniert. Um mich anders zu überzeugen, fügen Sie bitte eine Erklärung hinzu, wie dies funktionieren sollte und warum es bei dem Problem helfen soll. Das Hervorheben der Unterschiede zu scheinbar ähnlichen bestehenden anderen Antworten wäre ein Bonus. Besonders die von Babak.
Yunnosch