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


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


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


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.


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

12

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

rm .git/logs/refs/remotes/origin/master 

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!


8

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


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.


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.



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.


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.


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


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.


0

Diese Arbeit für mich

rm .git/logs/refs/remotes/origin/master 

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.


0

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


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.