Gibt es einen Befehl, mit dem Sie die Änderungen an einer Datei (oder Dateien) im Arbeitsverzeichnis teilweise rückgängig machen können?
Angenommen, Sie haben eine Datei häufig bearbeitet, stellen jedoch fest, dass Sie einige der Änderungen auf den festgeschriebenen Status zurücksetzen möchten, die anderen Änderungen jedoch nicht.
Ich stelle mir eine Option vor git checkout
, die sehr ähnlich funktioniert git add -p
, dh sie geht die Datei Stück für Stück durch und fragt, ob Sie sie behalten möchten oder nicht.
revert
Befehl anderer Versionskontrollsysteme auswählen, welche Änderungen in einer Datei rückgängig gemacht werden sollen? Wirklich fragen, da ich nur Erfahrung mit CVS und Git habe. In Gitgit checkout -- path/to/file
ist ein einzelner Befehl, der alle Änderungen in dieser Datei zurücksetzt, dies ist jedoch nicht dasselbe wie oben.git checkout --patch
undgit reset --patch
welche funktionieren wiegit add --patch
im neuesten Git.--
normalerweise das Ende der Analyse von Optionen an und dass alle Argumente, die danach kommen, wörtlich interpretiert werden müssen. Dies bedeutet, dass Sie./
vor keinem Dateinamen, der mit einem Minuszeichen beginnt , etwas hinzufügen müssen , wenn der Dateiname danach kommt--
.git checkout --patch
das Diff benutze, scheint es rückwärts zu sein. Die Minus-Symbole fügen meiner Arbeitskopie Text hinzu, und die Plus-Symbole ENTFERNEN Zeilen aus meiner Arbeitskopie.Mit Git-Version> = 1.7.1 kann ich
Ich bin mir nicht sicher, wann diese Funktion eingeführt wurde.
quelle
git reset -p
Änderungen aus dem Staging-Bereich / -Index selektiv entfernen können. Ich weiß auch nicht genau, in welcher Version von Git dies eingeführt wurde.git checkout $file
Setzt den Status der Datei$file
auf den zuletzt festgeschriebenen Status zurück. Ich denke, Sie können verwendengit checkout SHA-1 -- $file
, um die Datei auf das von SHA-1 identifizierte Commit zurückzusetzen.quelle
Wie viele Commits müssen Sie zurückgehen und auswählen? Wenn es nur eine ist, nehmen Sie vielleicht einen Zweig direkt davor, checken Sie die Datei aus, die Sie festgeschrieben haben, und
git add -p
fügen Sie sie dann hinzu, wie Sie es wollten. Dann können Sie zu Ihrem ursprünglichen Standort zurückkehren und die Datei in Ihrem temporären Zweig auschecken.das ist:
Andere Alternativen sind das Zurückgehen und Bearbeiten des Commits mit
git rebase -i
(Markieren des Commits alsedit
, dann Ausführen einesgit reset HEAD^
und Wiederholen des Commits, wenn es wieder in die Shell eingefügt wird).Wenn sich die Änderungen, aus denen Sie auswählen müssen, auf eine Reihe von Commits verteilen, ist es möglicherweise besser, sie als Patches (oder einen Patch, der alle abdeckt) zu extrahieren und den Patch von Hand zu bearbeiten, wobei Sie die Änderungen entfernen, die Sie behalten möchten. und Einspeisen des Restes in
git apply --reverse
.quelle