Sie sollten in der Lage sein, Ihre lokale Revision mit dem Remote-Repo zu erzwingen
git push -f <remote> <branch>
(zB git push -f origin master
). Wenn Sie aufhören <remote>
und <branch>
alle lokalen Zweige erzwingen, die sich gesetzt haben --set-upstream
.
Seien Sie gewarnt, wenn andere Personen dieses Repository freigeben, wird ihr Revisionsverlauf mit dem neuen in Konflikt stehen. Und wenn sie nach dem Zeitpunkt der Änderung lokale Commits haben, werden sie ungültig.
Update : Ich dachte, ich würde eine Randnotiz hinzufügen. Wenn Sie Änderungen erstellen, die von anderen überprüft werden, ist es nicht ungewöhnlich, einen Zweig mit diesen Änderungen zu erstellen und regelmäßig neu zu starten, um sie mit dem Hauptentwicklungszweig auf dem neuesten Stand zu halten. Lassen Sie andere Entwickler wissen, dass dies regelmäßig geschieht, damit sie wissen, was sie erwartet.
Update 2 : Aufgrund der zunehmenden Anzahl von Zuschauern möchte ich einige zusätzliche Informationen hinzufügen, was zu tun ist, wenn bei Ihnen upstream
ein Force-Push auftritt.
Angenommen, ich habe Ihr Repo geklont und einige Commits wie folgt hinzugefügt:
D ---- E Thema
/.
A ---- B ---- C Entwicklung
Aber später wird der development
Zweig mit einem getroffen rebase
, was dazu führt, dass ich beim Ausführen einen Fehler wie diesen erhalte git pull
:
Objekte auspacken: 100% (3/3), fertig.
Von <Reposition>
* Filialentwicklung -> FETCH_HEAD
Automatisches Zusammenführen von <Dateien>
KONFLIKT (Inhalt): Konflikt in <Standorte> zusammenführen
Automatische Zusammenführung fehlgeschlagen; Beheben Sie Konflikte und schreiben Sie das Ergebnis fest.
Hier könnte ich die Konflikte beheben und commit
, aber das würde mich mit einer wirklich hässlichen Commit-Geschichte zurücklassen:
C ---- D ---- E ---- F Thema
///
A ---- B -------------- C 'Entwicklung
Die Verwendung mag verlockend aussehen, git pull --force
aber seien Sie vorsichtig, da Sie sonst gestrandete Verpflichtungen haben:
D ---- E Thema
A ---- B ---- C 'Entwicklung
Die wahrscheinlich beste Option ist also, eine git pull --rebase
. Dies erfordert, dass ich alle Konflikte wie zuvor löse, aber für jeden Schritt, anstatt mich zu verpflichten, werde ich verwenden git rebase --continue
. Am Ende wird der Commit-Verlauf viel besser aussehen:
D '--- E' Thema
/.
A ---- B ---- C 'Entwicklung
Update 3: Sie können die --force-with-lease
Option auch als "sichereren" Kraftstoß verwenden, wie von Cupcake in seiner Antwort erwähnt :
Beim Force-Pushing mit einem "Lease" schlägt der Force-Push fehl, wenn auf der Fernbedienung neue Commits vorhanden sind, die Sie nicht erwartet haben (technisch gesehen, wenn Sie sie noch nicht in Ihren Remote-Tracking-Zweig abgerufen haben). Dies ist hilfreich, wenn Sie möchten nicht versehentlich die Commits anderer Personen überschreiben, von denen Sie noch nicht einmal wussten, und Sie möchten nur Ihre eigenen überschreiben:
git push <remote> <branch> --force-with-lease
Weitere Informationen zur Verwendung finden Sie --force-with-lease
in den folgenden Abschnitten:
git push origin --force
bei dir nicht funktioniert?