Wie erzwinge ich richtig einen Git-Push?

Ich habe ein entferntes, nicht nacktes Repository eingerichtet und es auf meinen Computer geklont. Ich habe einige lokale Änderungen vorgenommen, mein lokales Repository aktualisiert und die Änderungen zurück in mein entferntes Repository übertragen. Bis zu diesem Punkt war alles in Ordnung.

Jetzt musste ich etwas in der entfernten Repository ändern. Dann änderte ich etwas in meinem lokalen Repository. Mir wurde klar, dass die Änderung in der entfernten Projektgruppe nicht notwendig war. Also habe ich versucht, git push von meinem lokalen Repository in mein entferntes Repository zu übertragen, aber ich bekam eine Fehlermeldung wie:

Um zu verhindern, dass Sie die Historie verlieren, wurden nicht-schnell-vorwärts Updates abgelehnt Merge die Remote-Änderungen vor dem Push wieder. Siehe den 'Hinweis about fast-forwards' Abschnitt von git push --help für Details.

Ich dachte, dass wahrscheinlich ein

git push --force

meine lokale Kopie dazu zwingen würde, Änderungen an die entfernte Kopie weiterzugeben und sie gleich zu machen. Es erzwingt die Aktualisierung, aber wenn ich zum entfernten Repository zurückkehre und eine Übergabe durchführe, stelle ich fest, dass die Dateien veraltete Änderungen enthalten (solche, die das entfernte Hauptrepository zuvor hatte).

Wie ich in den Kommentaren zu einer der Antworten erwähnt habe:

Ich habe versucht, die Änderungen zu erzwingen, aber wenn ich zum Master-Server zurückkehre, um die Änderungen zu speichern, erhalte ich veraltete Staging-Dateien. Wenn ich also eine Übergabe durchführe, sind die Repositories nicht identisch. Und wenn ich versuche, git push erneut zu verwenden, erhalte ich denselben Fehler.

Wie kann ich dieses Problem beheben?

Lösung

Tun Sie es einfach:

git push origin  --force

oder wenn Sie ein bestimmtes Repo haben:

git push https://git.... --force

Dies löscht die vorherige(n) Übertragung(en) und pusht die aktuelle(n).

Es mag nicht richtig sein, aber falls jemand über diese Seite stolpert und eine einfache Lösung sucht...

Kurzes Flag

Beachten Sie auch, dass "f" die Abkürzung für "-force" ist, also

git push origin  -f

auch funktionieren wird.

Kommentare (12)

Zunächst einmal würde ich keine Änderungen direkt in der "Haupt"-Repo vornehmen. Wenn Sie wirklich eine "Haupt"-Repo haben wollen, dann sollten Sie nur in diese pushen und sie niemals direkt ändern.

Was die Fehlermeldung angeht, die Sie erhalten, haben Sie versucht, git pull von Ihrem lokalen Projektarchiv und dann git push in das Hauptprojektarchiv zu übertragen? Was Sie derzeit tun (wenn ich es richtig verstanden habe), ist, den Push zu erzwingen und dann Ihre Änderungen in der "Haupt"-Repo zu verlieren. Sie sollten die Änderungen zuerst lokal zusammenführen.

Kommentare (4)

Ich würde es wirklich empfehlen:

  • nur in das Haupt-Repository pushen

  • sicherzustellen, dass das Haupt-Repository ein Bare Repo ist, damit es keine Probleme damit gibt, dass der Arbeitsbaum des Haupt-Repositorys nicht mit seiner .git-Basis synchronisiert ist. Siehe "Wie verschiebt man ein lokales Git-Repository auf einen anderen Computer?"

  • Wenn Sie Änderungen am Haupt-Repository vornehmen müssen, klonen Sie es (auf dem Hauptserver), nehmen Sie Ihre Änderungen vor und pushen Sie es zurück

Mit anderen Worten: Halten Sie ein Bare Repo sowohl vom Hauptserver als auch vom lokalen Computer aus zugänglich, um ein einziges Upstream Repo zu haben, von/zu dem Sie pull/pullen können.

Kommentare (1)