Ich möchte ein bestimmtes Commit in Git zurücksetzen. Leider verwendet unsere Organisation immer noch CVS als Standard. Wenn ich mich also wieder für CVS engagiere, werden mehrere Git-Commits zu einem zusammengefasst. In diesem Fall würde ich gerne das ursprüngliche Git-Commit herausgreifen, aber das ist unmöglich.
Gibt es einen ähnlichen Ansatz git add --patch
, mit dem ich Unterschiede selektiv bearbeiten kann, um zu entscheiden, welche Teile eines Commits zurückgesetzt werden sollen?
Antworten:
Verwenden Sie die Option
--no-commit
(-n
)git revert
, um die Änderungen aufzuheben, und verwenden Sie danngit add --patch
:Hinweis: Die Dateien, die Sie mit git add --patch hinzufügen, sind die Dateien, die Sie zurücksetzen möchten, nicht die Dateien, die Sie behalten möchten.
quelle
git reset --hard
dem Festschreiben die anderen Änderungen zu verwerfen, die Sie nicht zurücksetzen wollten.git reset --hard
ist gefährlich für Neulinge, da es gewünschte Änderungen verlieren könnte. Statt gewöhnengit status
, diese Hinweise fürgit checkout -- FILE..
zu revert Dinge mehr sicher.git
;git revert
sollte nur ein--patch
Argument nehmen.git revert
wird zum Zurücksetzen ganzer Commits verwendet. Sie könnengit checkout -p
interaktiv Bits zum Zurücksetzen auswählen.commit
zuerst oderstash
dann versuchenrevert
.Ich habe Folgendes erfolgreich verwendet.
Setzen Sie zuerst das vollständige Commit zurück (setzt es in den Index), aber schreiben Sie es nicht fest.
Entfernen Sie dann interaktiv die rückgängig gemachten GUTEN Änderungen aus dem Index
Übernehmen Sie dann den umgekehrten Unterschied der fehlerhaften Änderungen
Schließlich befinden sich die rückgängig gemachten GUTEN Änderungen (die durch den Befehl zum Zurücksetzen nicht bereitgestellt wurden) noch im Arbeitsbaum. Sie müssen aufgeräumt werden. Wenn im Arbeitsbaum keine weiteren nicht festgeschriebenen Änderungen verbleiben, kann dies von durchgeführt werden
quelle
reset HEAD .
), da keine endgültige Bereinigung des Arbeitsverzeichnisses erforderlich ist?reset -p
kürzer ist alsreset HEAD
gefolgt vonadd -p
. Die Bereinigung ist jedoch weiterhin erforderlich, da sich die zurückgesetzten "guten" Hunks nach dem Festschreiben noch im Arbeitsverzeichnis befinden.Persönlich bevorzuge ich diese Version, die die automatisch generierte Festschreibungsnachricht wiederverwendet und dem Benutzer die Möglichkeit gibt, das Wort "Teilweise" vor dem endgültigen Festschreiben zu bearbeiten und einzufügen.
quelle
Lösung:
quelle
Eine andere Alternative (wenn Ihre aktuelle Version einer Datei nicht zu weit von der Version entfernt ist, die Sie zurücksetzen möchten ) besteht darin, den Hash des Commits unmittelbar vor dem abzurufen, von dem Sie teilweise zurücksetzen möchten (von
git log
). Dann wird Ihr Befehl:Dadurch werden die Dateien in Ihrem Arbeitsbaum geändert, es werden jedoch keine Commits erstellt. Wenn Sie also wirklich Probleme haben, können Sie einfach von vorne beginnen
git reset --hard -- file/you/want/to/fix.ext
.quelle
Sie können git-revert -n verwenden und dann add --patch verwenden, um Hunks auszuwählen.
quelle