744 Stimmen

Git und böser "Fehler: kann vorhandene Info/Refs nicht sperren fatal"

Nach dem Klonen von einem entfernten Git-Repository (bei bettercodes) habe ich einige Änderungen vorgenommen, commited und versucht zu pushen:

git push origin master

Irrtümer mit:

Fehler: kann vorhandene Infos/Referenzen nicht sperren
fatal: git-http-push fehlgeschlagen

Dieser Fall betrifft ein bereits bestehendes Repository.

Was ich vorher gemacht habe, war:

  1. git config –global http.sslVerify false
  2. git init
  3. git remote add [url]
  4. git clone
  5. Daten ändern
  6. git commit

Bei "bettercodes" habe ich keinen Zugriff auf das Git-Protokoll.

Ich verwende Windows. Die detaillierte Fehlermeldung lautete:

C:\MyWorkStuff\Projects\Ruby\MyProject\>git push origin master
Unable to create branch path https://user:password@git.bettercodes.org/myproject/info/
error: cannot lock existing info/refs
fatal: git-http-push failed

Ich habe vorher geklont, dann den Code geändert und übertragen.

55voto

emirc Punkte 1753

Das hat bei mir funktioniert:

  1. entfernen .git/logs/refs/remotes/origin/branch
  2. entfernen .git/refs/remotes/origin/branch
  3. Exécuter git gc --prune=now

Mehr über git gc Befehl hier: https://git-scm.com/docs/git-gc

31voto

FrankMonza Punkte 1984

Ich habe das Problem folgendermaßen gelöst

git branch --unset-upstream
rm .git/refs/remotes/origin/{branch}
git gc --prune=now
git branch --set-upstream-to=origin/{branch} {branch}
#or git push --set-upstream origin {branch}
git pull

Dies setzt voraus, dass Ihre lokalen und entfernten Zweige aufeinander abgestimmt sind und Sie nur den refs-Fehler als nicht fatal erhalten.

29voto

Dharmesh Mansata Punkte 3436

Vor dem Pull müssen Sie Ihre lokalen Änderungen bereinigen. Der folgende Befehl hilft mir bei der Lösung.

git remote prune origin

und dann nach

git pull origin develop

Ich hoffe, das hilft!

27voto

jave.web Punkte 12114

Als Referenz für Visual Studio Code (vscode, code) (und möglicherweise andere IDEs)

Ich musste das Kommando übernehmen: Git: Fetch (Prune)

Die Kommandozeilenalternative sollte lauten: git fetch --prune

Dann Neustart die gesamte IDE.

Und um eine gewisse Perspektive zu geben, möchte ich zitieren Die Docks von BitBucket :

Was ist der Unterschied zwischen Git Prune,
Git Fetch --prune, und Git Remote Prune?

git remote prune y git fetch --prune tun dasselbe: Sie löschen die Verweise auf Zweige, die auf der Gegenseite nicht existieren. Dies ist sehr wünschenswert, wenn Sie in einem Teamworkflow arbeiten, in dem entfernte Zweige nach der Zusammenführung mit main . Der zweite Befehl, git fetch --prune stellt eine Verbindung zur Gegenstelle her und holt sich den letzten Status der Gegenstelle, bevor es zu einem Pruning kommt. Es handelt sich im Wesentlichen um eine Kombination von Befehlen:
git fetch --all && git remote prune
Das generische git prune Befehl ist völlig anders. Wie im Abschnitt "Überblick" beschrieben, löscht git prune lokal gelöschte Commits.

27voto

George Armstrong Punkte 221

Ich hatte dieses Problem, weil ich mich in einem Zweig befand, der einen ähnlichen Namen wie ein vorgelagerter Zweig hatte, d.h. der vorgelagerte Zweig hieß example-branch und meine örtliche Zweigstelle hieß example-branch/backend . Die Lösung bestand darin, den Namen meiner örtlichen Zweigstelle folgendermaßen zu ändern:

git branch -m <new name goes here>

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X