2017-01-05 4 views
0

Ich führte vor kurzem eine hard reset zu einem anderen Zweig, wie ich nicht konnte meine master Zweig zurück in einen Arbeitsstatus. Ich tat dies mit dem Befehl:Git drücken Ursprung Master nach Hard Reset

git reset --hard masterBackupBeforeMerginDateDepositReceived04-01-2017 

(dh auf den Zweig, wo die besondere Eigenschaft, die ich gebrochen hatte, war noch in Betrieb)

ich dann lief:

git commit -m 'commit after getting adds/omits working again' 

, dass die unterbrochene Kontrolle über Feature funktionierte wieder auf meinem lokalen master Zweig - es war, also wollte ich dies erneut zu bestätigen, um sicher zu sein, dass ich diesen Arbeitsstatus gespeichert hatte.

Ich lief dann

git push origin master 

die master Zweig an den Server erneut zu drücken, so dass die nun behoben Feature auf der Live-Version wieder zu arbeiten beginnen soll. Doch nach dieser push ausgeführt wird, angezeigt Git eine Nachricht, die ich vorher noch nicht gesehen haben:

To [email protected]:abc/xyz.git ! [rejected] master -> master (non-fast-forward) error: failed to push some refs to '[email protected]:abc/xyz.git' hint: Updates were rejected because the tip of your current branch is behind hint: its remote counterpart. Integrate the remote changes (e.g. hint: 'git pull ...') before pushing again. hint: See the 'Note about fast-forwards' in 'git push --help' for details.

Es scheint, dass Git ist nicht glücklich mit mir eine ‚alte‘ Version auf den Server schieben, wenn es eine ‚neueren 'Version derzeit auf dem Server ... Wie kann ich zwingen, den Server meinen push der akzeptieren ‚alten‘ Version (die derzeit der master Zweig auf meinem lokalen Rechner?

Antwort

0

einfach die Kraft Option hinzufügen -f

git push -f origin master

+0

Ich habe dies versucht, aber Git gab mir eine Fehlermeldung mit den Worten: 'Fehler: Schief einige Referenzen zu '[email protected]: moonhub/moon.git' Hinweis: Updates wurden abgelehnt, weil die Spitze Ihrer aktuellen Zweig ist hinter Hinweis: sein Gegenstück. Integrieren der Fernänderungen (z.B. Hinweis: 'Git ziehen ...'), bevor Sie erneut drücken. Hinweis: Siehe 'Hinweis zu Schnellvorlauf' in 'git push --help' für Details ', so scheint es, dass der 'Push' fehlgeschlagen ist ... irgendwelche anderen Vorschläge? – someone2088

+0

Kann ich "Master" einfach durch einen anderen lokalen Zweig ersetzen und dann drücken? Wie würde ich das tun? – someone2088

+0

Die Option '-f' sollte diese Nachricht auflösen. Ich bin mir nicht sicher, warum Sie das bekommen. – Rafael

0

Wenn Sie Reset verwenden und dann den Push erzwingen, kann es andere Leute durcheinander bringen, die die Version gezogen haben, die Sie nicht mögen.

Nachdem die defekte Version auf den Remote-Repo übertragen wurde, ist es am besten, die Wiederherstellung unter Verwendung von revert statt Reset durchzuführen.

Revert fügt am Anfang der fehlerhaften Festschreibung Änderungen hinzu, sodass die neue Version so aussieht wie zuvor. Dann, wenn Sie drücken, drücken Sie nur neue Änderungen, die die Fehler beheben, die früher geschoben wurden.

Zum Beispiel

git revert HEAD 

neue Änderungen hinzufügen, die die Wirkung der jüngsten begehen rückgängig machen. Weitere Informationen zum Rückgängigmachen mehrerer Commits finden Sie in der Dokumentation zu revert.

+0

Danke für Ihre Antwort. Ich habe versucht, 'git 36ceff5f071b4c45f56a6c4bca523d0e9b5c1bc8' zurück, dh zu einem früheren Commit, aber es gab mir einen Fehler, der besagt, dass es nicht wiederherstellen konnte:' Fehler: konnte 36ceff5 ... dateDepositReceived klebt nicht nach Änderung auf Anzahlung Wert Hinweis: nach der Auflösung die konflikte markieren die korrigierten pfade hinweis: mit 'git add ' oder 'git rm ' hinweis: und begehe das ergebnis mit 'git commit'' – someone2088

+0

Ich habe einen anderen Zweig, in dem die Funktion noch funktioniert- kann ich nur Ersetzen Sie meinen 'Master'-Zweig durch diesen anderen Zweig? Wie würde ich das tun? – someone2088

+0

Sie können Ihren lokalen Master-Zweig mit dem Reset-Befehl auf die Arbeitsversion zurücksetzen. z.B. checkmaster und dann git reset --hard good-branch-name Dann musst du die von Rafael oben erwähnte Option -f verwenden. Wenn jedoch andere Benutzer die schlechte Version gezogen haben, werden ihre Repos nicht synchronisiert, und sie können die von ihnen vorgenommenen Änderungen nicht pushen. Verwenden andere Benutzer diesen Zweig? –

0

Wenn Sie eine lokale Verzweigungx an die Remote-Master-Verzweigung senden möchten, können Sie versuchen git push -f origin branchx:master.

Wenn Sie den lokalen Zweig bereits in Master umbenannt haben, können Sie git push -f origin master verwenden.

Verwandte Themen