Vollständige Nachricht:
error: Ref refs/remotes/origin/user is at 3636498c2ea7735fdcedc9af5ab3c8689e6abe77 but expected a21359c6cc2097c85775cde6a40105f4bd7100ec
From github.com:{github project url}
! a21359c..6273ffc user -> origin/user (unable to update local ref)
git push --force
. Versuche zu rennengit pull --force
.Antworten:
Wenn Sie git unter einem Dateisystem ausführen, bei dem die Groß- und Kleinschreibung nicht berücksichtigt wird (Windows oder OS X), tritt dies auf, wenn zwei Zweige mit demselben Namen, aber unterschiedlicher Großschreibung vorhanden sind, z. B.
user_model_changes
undUser_model_changes
wenn beide Remote-Zweige mit derselben Verfolgungsreferenz übereinstimmen .Löschen Sie den falschen Remote-Zweig (Sie sollten keine Zweige haben, die sich nur von Fall zu Fall unterscheiden) und dann
git remote prune origin
und alles sollte funktionierenquelle
.git\refs\remotes\origin
Ordner manuell entfernt habe und danngit pull
wieder.Permanente Korrektur
git update-ref -d
hat meine Instanz dieses Fehlers behoben, zBeachten Sie, dass dies keine Auswirkungen auf Remote hat.
In meinem Fall hat ein nachfolgender
git fetch
Abruf dieses Zweigs und das anschließende Abrufen / Ziehen von Git nicht mehr den Fehler "Remote Ref ist bei, aber erwartet" ergeben.Wenn das nicht funktioniert, eine vorübergehende Korrektur:
Beachten Sie auch, dass, wenn Sie sich nicht für den betreffenden Zweig interessieren (z. B. nur den Master aktualisieren möchten, nicht den Ursprung / Benutzer), eine
git pull
Problemumgehung darin besteht, den bestimmten Zweig, den Sie interessieren, abzurufen und dann einfach zusammenzuführen, zquelle
Löschen Sie einfach die Ordner und Dateien unter
\.git\refs\remotes\origin
. Funktioniert, wenn Sie keine Änderungen vorgenommen haben.quelle
Ich habe dies ausgeführt, um das Problem zu lösen:
quelle
Verwenden Sie die folgenden zwei Befehle nacheinander.
Dadurch wird Ihr Problem behoben.
quelle
Ich musste meinen Zweig von meiner Kommandozeile entfernen unter:
und dann manuell:
Ich konnte die Änderungen ziehen.
Hinweis: Ich habe SourceTree verwendet und konnte den Pull nicht ausführen .
quelle
.git\packed-refs
bevor er für mich repariert wurde.Ein Hard-Reset behebt auch das Problem
quelle
Klarere Schritte
im Terminal
tun
ls
, sehen Sie einige Zweige und KopfEntfernen Sie den Zweig, von dem Sie glauben, dass er das Problem hat
Wenn es nicht funktioniert hat, löschen Sie alle Zweige / HEAD
Hoffe es funktioniert jetzt.
quelle
git update-ref -d <branchname>
?Versuchen Sie das, es hat bei mir funktioniert. In Ihrem Terminal :
git remote prune origin
.quelle
Leider haben GIT-Befehle wie Prune und Reset oder Push bei mir nicht funktioniert. Prune arbeitete einmal und dann kehrte das Problem zurück.
Die dauerhafte Lösung, die für mich funktioniert hat, besteht darin, eine Git-Datei manuell zu bearbeiten. Gehen Sie einfach in den .git-Ordner des Projekts und öffnen Sie die Datei packed-refs in einem Texteditor wie Notepad ++. Navigieren Sie dann zu der Zeile mit dem fehlerhaften Zweig und aktualisieren Sie die Guid auf die erwartete.
Wenn Sie eine Nachricht haben wie:
"Fehler: Ref 'refs / remotes / origin / feature / branch_xxx' kann nicht gesperrt werden: ist bei 425ea23facf96f51f412441f41ad488fc098cf23, aber erwartet 383de86fed394ff1a1aeefc4a522d886adcecd79"
Suchen Sie dann in der Datei die Zeile mit 'refs / remotes / origin / feature / branch_xxx'. Die Guid dort wird die erwartete (2.) sein - 383de86fed394ff1a1aeefc4a522d886adcecd79. Sie müssen es in das echte (1.) ändern - 425ea23facf96f51f412441f41ad488fc098cf23.
Wiederholen Sie diesen Vorgang für die anderen fehlerhaften Zweige, und Sie können fortfahren. Manchmal musste ich nach dem erneuten Abrufen für dieselben Zweige wiederholen, die ich bereits zuvor 'repariert' hatte. Beim erneuten Abrufen aktualisiert GIT die Guids und gibt Ihnen die neuesten.
Auf jeden Fall ist das Problem kein Show Stopper. Die Verzweigungsliste wird aktualisiert. Dies ist eher eine Warnung.
quelle
git for-each-ref --format = 'delete% (refname)' refs / original | git update-ref --stdin git reflog verfallen --expire = now --all git gc --prune = now
quelle
Gleicher Fall hier, aber nichts über gepostete Kommentare ist in meinem Fall richtig. Ich habe nur einen Zweig (Master) und verwende nur das Unix-Dateisystem. Dieser Fehler tritt zufällig auf, wenn ich git fetch --progress --prune origin ausführe und der Zweig voraus ist oder 'Herkunft / Master'. Niemand kann sich verpflichten, nur 1 Benutzer kann Push ausführen.
HINWEIS: Ich habe ein Submodul im Acme-Repository und Acme hat neue Submoduländerungen (neue Commits). Ich muss zuerst ein Submodul-Update mit Git-Submodul-Update durchführen.
Um dieses Problem zu lösen (in meinem Fall), führen Sie einfach den ersten Git-Push aus, wenn Ihr Zweig vor dem Ursprung liegt.
quelle
Ich weiß, dass dies alt ist, aber ich habe meine eigene Lösung. Da ich den Quellbaum verwende, tritt dieser Fehler auf, weil jemand einen neuen Zweig erstellt. Der Quellbaum ist darüber verwirrt. Nachdem ich die Schaltfläche "Aktualisieren" neben der Combobox "Remote Branch to Pull" gedrückt habe, scheint Sourcetree die Verzweigungsliste aktualisiert zu haben, und jetzt kann ich erfolgreich ziehen.
quelle
Ich hatte das gleiche Problem, das verursacht wurde, weil ich auf ein älteres Commit zurückgesetzt habe, obwohl ich bereits auf den Remote-Zweig verschoben habe.
Ich habe es gelöst, indem ich meinen lokalen Zweig gelöscht, den Ursprungszweig ausgecheckt
git checkout origin/my_branch
und dann ausgeführt habegit checkout my_branch
quelle
Nach ständiger Suche ist dies die Lösung, die für mich funktioniert hat und das Aufheben / Entfernen des Upstreams beinhaltet
quelle