Gibt es eine Möglichkeit, Git Pull zurückzusetzen oder rückgängig zu machen, damit meine Quelle / Repos in den alten Zustand versetzt werden, der vor dem Git Pull bestand? Ich möchte dies tun, weil einige Dateien zusammengeführt wurden, was ich nicht wollte, sondern nur andere verbleibende Dateien zusammenführen. Ich möchte diese Dateien zurückbekommen. Ist das möglich?
EDIT: Ich möchte Git Merge zur Verdeutlichung rückgängig machen. Nachdem ich einige Antworten gesehen hatte, tat ich dies
git reflog
bb3139b... HEAD@{0}: pull : Fast forward
01b34fa... HEAD@{1}: clone: from ...name...
Was soll ich jetzt tun? Tun git reset --hard
ist in Ordnung? Ich möchte es nicht noch einmal schrauben, also nach detaillierten Schritten fragen?
git
version-control
git-merge
seg.server.fault
quelle
quelle
git reset --hard 01b34fa
In diesem Fall hätten Sie das tun können,git reset --hard HEAD^
was auf ein Commit vor dem HEAD zurückgesetzt wurde.git reflog
wird alles zeigen, was mit git gemacht wurde. Es gibt eine Sorge,git reset --hard [sha1 of something from reflog]
die alles zurücksetzt, was gezeigt wirdreflog
, was manchmal kein Ziel ist, z. Sie möchten die Zusammenführung auf dem vom Zweig gezogenen Hauptzweig mit fehlerhaften Daten zurücksetzen (passiert), und nach dieser Zusammenführung haben Sie an anderen Zweigen gearbeitet.reflog
zeigt jeden Chage auf anderen Zweigen. Abergit checkout master
undgit reset --hard [SH1 of commit on master branch just before merge]
wird nur zurückgesetzt aktuellen Master - Zweig Entfernen gezogen merge vom Ursprung.Antworten:
Das Ausführen
git pull
führt die folgenden Aufgaben der Reihe nach aus:git fetch
git merge
Der Zusammenführungsschritt kombiniert Zweige, die so eingerichtet wurden, dass sie in Ihrer Konfiguration zusammengeführt werden. Sie möchten den Zusammenführungsschritt rückgängig machen , aber wahrscheinlich nicht den Abruf (macht nicht viel Sinn und sollte nicht notwendig sein).
Verwenden Sie zum Rückgängigmachen der Zusammenführung
git reset --hard
das Zurücksetzen des lokalen Repositorys auf einen vorherigen Status. Verwenden Sie git-reflog , um den SHA-1 des vorherigen Status zu finden, und setzen Sie ihn dann zurück.Warnung
Mit den in diesem Abschnitt aufgeführten Befehlen werden alle nicht festgeschriebenen Änderungen entfernt, was möglicherweise zu einem Arbeitsverlust führen kann:
Alternativ können Sie auf einen bestimmten Zeitpunkt zurücksetzen, z.
quelle
master@{1}
, die die vorherige Position istmaster
,master@{"5 minutes ago"}
odermaster@{14:30}
. Ausführliche Informationen zum Festlegen von Revisionen auf diese Weise finden Sie imman git-rev-parse
Abschnitt "Festlegen von Revisionen".Updating d2c90a3..035ac4d
. Hier können Sie auchd2c90a3
als Parameter zum Zurücksetzen verwenden.Wie die Antwort von jkp, aber hier ist der vollständige Befehl:
Dabei wird a0d3fe6 gefunden
und schauen Sie sich den Punkt an, an dem Sie rückgängig machen möchten.
quelle
git reset HEAD --hard
zum Beispiel nicht einfach tun ?git reset --hard HEAD@{n}
arbeitete abergit reflog
aktiviert habe: dab04ec HEAD @ {0}, aaaaaaa HEAD @ {1} und bbbbbbb HEAD @ {2}. Wenn ich das tue, werdegit reset --hard bbbbbbb
ich den KOPF 0 und 1 verlieren?Eine modernere Methode zum Rückgängigmachen einer Zusammenführung ist:
Und der etwas ältere Weg:
Die in früheren Antworten beschriebene Methode der alten Schule (Warnung: Alle lokalen Änderungen werden verworfen):
Aber eigentlich ist es wert , zu bemerken , dass
git merge --abort
nur äquivalent istgit reset --merge
daMERGE_HEAD
vorhanden ist. Dies kann in der Git-Hilfe zum Zusammenführen gelesen werden.Wenn nach einer fehlgeschlagenen Zusammenführung keine vorhanden ist
MERGE_HEAD
, kann die fehlgeschlagene Zusammenführung rückgängig gemacht werden,git reset --merge
jedoch nicht unbedingt mitgit merge --abort
. Daher handelt es sich nicht nur um alte und neue Syntax für dieselbe Sache . Deshalb findegit reset --merge
ich es viel nützlicher in der täglichen Arbeit.quelle
git merge --abort
funktioniert WÄHREND einer Zusammenführung, nicht nachdem siegit pull
beendet ist. Diese Antwort scheint für die Frage irrelevant zu sein.git reset --merge
löscht alle Änderungen, die nicht für das Festschreiben bereitgestellt wurden. Fand das auf die harte Tour heraus.es funktioniert beim ersten Gebrauch:
git reflog
Finden Sie Ihren SHA Ihres vorherigen Status und machen Sie (HEAD @ {1} ist ein Beispiel)
quelle
Wenn Sie gitk haben (versuchen Sie, "gitk --all von Ihrer git-Befehlszeile aus" auszuführen), ist dies einfach. Führen Sie es einfach aus, wählen Sie das Commit aus, auf das Sie ein Rollback durchführen möchten (Rechtsklick), und wählen Sie "Master-Zweig auf hier zurücksetzen". Wenn Sie keine nicht festgeschriebenen Änderungen haben, wählen Sie die Option "schwer".
quelle
Angenommen, es
$COMMIT
war die letzte Festschreibungs-ID, bevor Sie ausgeführt habengit pull
. Was Sie brauchen, um den letzten Zug rückgängig zu machen, istgit reset --hard $COMMIT
.
Bonus:
Wenn ich von Pull spreche, möchte ich einen interessanten Trick teilen,
git pull --rebase
Dieser obige Befehl ist der nützlichste Befehl in meinem Git-Leben, der viel Zeit gespart hat.
Versuchen Sie diesen Befehl, bevor Sie Ihr neues Commit auf den Server übertragen. Es synchronisiert automatisch die neuesten Serveränderungen (mit einem Abruf + Zusammenführen) und platziert Ihr Commit oben im Git-Protokoll. Sie müssen sich keine Gedanken über manuelles Ziehen / Zusammenführen machen.
Details finden Sie unter: http://gitolite.com/git-pull--rebase
quelle
Dies ist der einfachste Weg, um Änderungen rückgängig zu machen.
Bitte sichern Sie Ihre geänderten Dateien, da dadurch die neu erstellten Dateien und Ordner gelöscht werden .
Wo
9573e3e0
ist Ihre {Commit-ID}?quelle
Updating ffce65bd..e929e884
, dann den dogit reset --hard ffce65bd
du kannst tun
git reset --hard ORIG_HEAD
seit "pull" oder "merge" ORIG_HEAD auf den aktuellen Status setzen, bevor diese Aktionen ausgeführt werden.
quelle
Git Pull Do unter Betrieb.
So machen Sie das Ziehen rückgängig:
Verbesserung:
Verwenden Sie das nächste Mal
git pull --rebase
anstelle vongit pull
.. den Synchronisierungsserver durch Ausführen (Abrufen und Zusammenführen).quelle
Wenn eine Zusammenführung fehlgeschlagen ist, was der häufigste Grund für das Rückgängigmachen von a ist
git pull
, führtgit reset --merge
das Ausführen genau das aus, was man erwarten würde: Behalten Sie die abgerufenen Dateien bei, aber machen Sie die Zusammenführung rückgängig, diegit pull
versucht hat, zusammenzuführen. Dann kann man entscheiden, was ohne die Unordnung zu tun ist, diegit merge
manchmal entsteht. Und es ist nicht erforderlich, die genaue Festschreibungs-ID zu finden, die--hard
in jeder anderen Antwort angegeben ist.quelle