1485 Stimmen

Git-Pull rückgängig machen, Repos auf alten Stand bringen

Gibt es eine Möglichkeit, Git Pull rückgängig zu machen, so dass meine Quellen/Repos in den alten Zustand vor dem Git Pull zurückkehren? Ich möchte dies tun, weil es einige Dateien zusammengeführt hat, die ich nicht zusammenführen wollte, sondern nur andere verbleibende Dateien. Ich möchte also diese Dateien zurückholen, ist das möglich?

EDIT: Ich möchte die Git-Zusammenführung zur Klärung rückgängig machen. Nachdem ich einige Antworten gesehen habe, habe ich dies getan

git reflog
bb3139b... HEAD@{0}: pull : Fast forward
01b34fa... HEAD@{1}: clone: from ...name...

Was soll ich jetzt tun? Unter git reset --hard ist OK? Ich will es nicht wieder vermasseln, also frage ich nach detaillierten Schritten?

2100voto

jkp Punkte 74580

Laufen git pull führt die folgenden Aufgaben in dieser Reihenfolge aus:

  1. git fetch
  2. git merge

Der Zusammenführungsschritt kombiniert Zweige, die in Ihrer Konfiguration für die Zusammenführung eingerichtet wurden. Sie möchten die zusammenführen Schritt, aber wahrscheinlich nicht die abrufen. (macht nicht viel Sinn und sollte nicht notwendig sein).

Zum Rückgängigmachen der zusammenführen verwenden git reset --hard um das lokale Repository auf einen früheren Zustand zurückzusetzen; verwenden Sie git-reflog um den SHA-1 des vorherigen Zustands zu finden und dann auf diesen zurückzusetzen.

Warnung

Die in diesem Abschnitt aufgeführten Befehle entfernen alle nicht übertragenen Änderungen, was zu einem Verlust von Arbeit führen kann:

git reset --hard

Alternativ können Sie auch auf einen bestimmten Zeitpunkt zurücksetzen, z. B.:

git reset --hard master@{"10 minutes ago"}

544voto

Jeffrey Sun Punkte 7109

Wie in der Antwort von jkp, aber hier ist der vollständige Befehl:

git reset --hard a0d3fe6

wobei a0d3fe6 wie folgt ermittelt wird

git reflog

und suchen Sie den Punkt, an dem Sie die Rückgängigmachung vornehmen möchten.

216voto

Martin G Punkte 15799

Ein modernerer Weg, eine Zusammenführung rückgängig zu machen, ist:

git merge --abort

Und die etwas ältere Art:

git reset --merge

Die in früheren Antworten beschriebene Methode der alten Schule (Warnung: alle Ihre lokalen Änderungen werden dabei verworfen):

git reset --hard

Es ist jedoch anzumerken, dass git merge --abort ist nur gleichwertig mit git reset --merge angesichts der Tatsache, dass MERGE_HEAD vorhanden ist. Dies kann in der Git-Hilfe für den Merge-Befehl nachgelesen werden.

git merge --abort is equivalent to git reset --merge when MERGE_HEAD is present.

Nach einer fehlgeschlagenen Zusammenführung, wenn es keine MERGE_HEAD kann die fehlgeschlagene Zusammenführung rückgängig gemacht werden mit git reset --merge aber nicht unbedingt mit git merge --abort , es handelt sich also nicht nur um eine alte und eine neue Syntax für dieselbe Sache . Deshalb finde ich git reset --merge in der täglichen Arbeit viel nützlicher sein.

94voto

Ezequiel García Punkte 2396

Es funktioniert erste Anwendung: git reflog

Finden Sie Ihr SHA des vorherigen Zustands und machen Sie (HEAD@{1} ist ein Beispiel)

git reset --hard HEAD@{1}

64voto

Sazzad Hissain Khan Punkte 33230

Angenommen, $COMMIT war die letzte Übertragungs-ID, bevor Sie die git pull . Um den letzten Zug rückgängig zu machen, benötigen Sie

git reset --hard $COMMIT

.

Bonus:

Wenn wir schon beim Thema Zugkraft sind, möchte ich Ihnen einen interessanten Trick verraten,

git pull --rebase

Der obige Befehl ist der nützlichste Befehl in meinem Git-Leben, der mir eine Menge Zeit erspart hat.

Bevor Sie Ihren neuen Commit auf den Server pushen, probieren Sie diesen Befehl aus. Er synchronisiert automatisch die letzten Änderungen des Servers (mit einem fetch + merge) und setzt Ihren Commit an die erste Stelle im Git-Log. Sie müssen sich keine Gedanken über manuelles Pull/Merge machen.

Einzelheiten finden Sie unter: http://gitolite.com/git-pull--rebase

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