Sie sollten in der Lage sein, Ihre lokale Revision in das entfernte Projektarchiv zu übertragen, indem Sie
git push -f <remote> <branch>
(z.B.. git push -f origin master
). Weglassen <remote>
y <branch>
erzwingt einen Push aller lokalen Zweige, die die Option --set-upstream
.
Seien Sie nur gewarnt, wenn andere Personen dieses Repository gemeinsam nutzen, wird ihr Revisionsverlauf mit dem neuen in Konflikt geraten. Und wenn sie nach dem Zeitpunkt der Änderung lokale Übertragungen haben, werden diese ungültig.
Update : Ich dachte, ich sollte eine Randbemerkung hinzufügen. Wenn Sie Änderungen erstellen, die von anderen überprüft werden, ist es nicht unüblich, einen Zweig mit diesen Änderungen zu erstellen und regelmäßig zu rebasen, um sie mit dem Hauptentwicklungszweig aktuell zu halten. Lassen Sie die anderen Entwickler einfach wissen, dass dies in regelmäßigen Abständen geschieht, damit sie wissen, was sie erwarten können.
Aktualisierung 2 : Aufgrund der zunehmenden Zahl von Zuschauern möchte ich einige zusätzliche Informationen darüber hinzufügen, was zu tun ist, wenn Ihr upstream
erfährt einen Kraftschub.
Nehmen wir an, ich habe Ihr Repository geklont und ein paar Commits wie folgt hinzugefügt:
D----E topic
/
A----B----C development
Später jedoch wird die development
Zweig wird mit einer rebase
was dazu führt, dass ich eine Fehlermeldung wie die folgende erhalte, wenn ich git pull
:
Unpacking objects: 100% (3/3), done.
From <repo-location>
\* branch development -> FETCH\_HEAD
Auto-merging <files>
CONFLICT (content): Merge conflict in <locations>
Automatic merge failed; fix conflicts and then commit the result.
Hier konnte ich die Konflikte beheben und commit
aber das würde mir eine wirklich hässliche Commit-Historie bescheren:
C----D----E----F topic
/ /
A----B--------------C' development
Es mag verlockend aussehen, die git pull --force
aber seien Sie vorsichtig, denn das führt dazu, dass Sie mit gestrandeten Commits dastehen:
D----E topic
A----B----C' development
Die beste Option ist also wahrscheinlich, eine git pull --rebase
. Dies erfordert, dass ich alle Konflikte wie zuvor löse, aber für jeden Schritt werde ich anstelle von Commit die Option git rebase --continue
. Am Ende wird der Commit-Verlauf viel besser aussehen:
D'---E' topic
/
A----B----C' development
Update 3: Sie können auch die --force-with-lease
Option als "sicherere" Kraft schieben, wie von Cupcake in seinem Antwort :
Force Push mit einem "Lease" erlaubt es, dass der Force Push fehlschlägt, wenn es neue Commits auf der Gegenstelle gibt, die Sie nicht erwartet haben (technisch gesehen, wenn Sie sie noch nicht in Ihren Remote-Tracking-Zweig geholt haben), was nützlich ist, wenn Sie nicht versehentlich die Commits von jemand anderem überschreiben wollen Commits eines anderen überschreiben wollen, von denen Sie noch gar nichts wussten, und Sie wollen nur Ihre eigenen überschreiben wollen:
git push <remote> <branch> --force-with-lease
Weitere Einzelheiten über die Verwendung von --force-with-lease
von einen der folgenden Punkte lesen: