In meinem Git-Repo, das ein SVN-Repo verfolgt, habe ich eine Reihe von Änderungen an einer einzelnen Datei vorgenommen.
Jetzt möchte ich diese Änderungen zurücksetzen (wie svn revert), aber nur Teile der Datei.
Ich möchte in der Lage sein, die Unterschiede in der Datei anzuzeigen, die Änderungen, die ich nicht möchte, zu verwerfen (zurückzusetzen) und die gewünschten Änderungen beizubehalten.
das
git add -i
Befehl scheint eine Option zu haben, aber ich möchte dies noch nicht inszenieren.
quelle
Ich glaube, Sie können es am einfachsten tun mit:
Aus der Manpage:
quelle
a
Option im Patch-Modus verwende, um eine gesamte Datei zu verwerfen, aber esgit checkout -- <file>
funktioniert wie erwartet. Weiß jemand warum?Sie könnten laufen
git diff
auf die Datei, Speichern Sie die diff, bearbeiten es um die Änderungen zu entfernen Sie sie speichern möchten, führen Sie es dann durchpatch -R
die restlichen diffs rückgängig zu machen.quelle
git diff
die gesamte Datei als geändert angezeigt wird. Dies geschieht normalerweise, wenn Sie die Datei mit anderen Zeilenenden als zuvor gespeichert haben. Dies würde auch dazu führenpatch
, dass die Patch-Datei abgelehnt wird. Klingt das nach dem, was passiert sein könnte?Sieht aus wie du willst
Sie können dann verwenden
um zu sehen, welche Änderung vor dem Festschreiben vorgenommen wird (da das Zurücksetzen nur ein Festschreiben in Vorwärtsrichtung ist, das die Umkehrung einer Änderung in der Vergangenheit repliziert)
Wenn Sie mit einem reinen Git-Repository arbeiten, können Sie möglicherweise abhängig von Ihren Zielen interaktive rebase (
git rebase -i
) verwenden, um zu dem Commit zurückzukehren, das Ihnen nicht gefallen hat, und das Commit rückwirkend bearbeiten, sodass die Änderungen, die Sie nicht mögen, nie vorgenommen werden , aber das ist im Allgemeinen nur, wenn Sie wissen, dass Sie es nie wieder sehen wollen.quelle
Wenn Sie die Frage erneut lesen, klingt es so, als ob Sie Änderungen in Ihrem Arbeitsbaum rückgängig machen möchten und nicht Änderungen, die zuvor festgeschrieben wurden. Einige der anderen Antworten lassen jedoch den Eindruck entstehen, dass meine Lesung möglicherweise falsch ist. Könntest Du das erläutern?
Wenn sich die Änderungen nur in Ihrer Arbeitskopie befinden, können Sie dies am einfachsten tun, indem Sie die Änderungen vornehmen, die Sie beibehalten möchten:
Werfen Sie dann die Änderungen weg, die Sie nicht behalten möchten, indem Sie die Indexversion überprüfen:
Dann entfernen Sie die Änderungen, wenn Sie sie noch nicht inszenieren möchten:
Dieses Rezept setzt nur ausgewählte Änderungen an der Datei (oder den von Ihnen angegebenen Dateien) zurück und erstellt kein temporäres Commit, das dann zurückgesetzt werden muss.
Wenn Sie nur einige der in früheren Festschreibungen vorgenommenen Änderungen selektiv anwenden möchten, können Sie zuerst eine Datei auf den vorherigen festgeschriebenen Status zurücksetzen:
Dann können Sie dem vorherigen Rezept folgen
git add -i <file>
, um die Änderungen, die Sie behalten möchten,git checkout -- <file>
zugit reset -- <file>
inszenieren, die unerwünschten Änderungen wegzuwerfen und die Änderungen zu "entfernen".quelle
Die in den Antworten hier beschriebenen Befehlszeilenoptionen sind praktisch, wenn sich die Datei auf einem Server befindet, auf den ich über ein SSH-Terminal zugreife. Wenn sich die Datei jedoch auf meinem lokalen Computer befindet, bevorzuge ich den folgenden Weg:
Öffnen Sie die Datei im NetBeans-Editor (der mit Git-Unterstützung geliefert wird). Netbeans setzt rote / grüne / blaue Markierungen an den Zeilennummern, um anzuzeigen, wo Inhalte gelöscht / hinzugefügt / geändert wurden.
Wenn Sie mit der rechten Maustaste auf eine dieser Markierungen klicken, können Sie diese Änderung rückgängig machen. Außerdem können Sie mit der rechten Maustaste auf rote und blaue Markierungen klicken, um die alte Version in einem Popup anzuzeigen.
quelle