Ich möchte Änderungen, die durch ein bestimmtes Commit vorgenommen wurden, nur auf eine bestimmte Datei zurücksetzen.
Kann ich dafür den Befehl git revert verwenden?
Irgendeine andere einfache Möglichkeit, dies zu tun?
git
version-control
revert
Lakshman Prasad
quelle
quelle
Antworten:
Der sauberste Weg, den ich gesehen habe, wird hier beschrieben
Ähnlich wie bei VonCs Antwort, jedoch mit
git show
undgit apply
.quelle
fatal: unrecognized input
-3
Flag hinzufügen , damit git für eine Drei-Wege-Zusammenführung gilt, wenn der Patch fehlschlägt, da ich normalerweise eine Änderung etwas früher korrigiere.some_file.c
der Pfad zur Datei enthalten ist, wenn es einen gibt, sonst werden Sie stillschweigend nichts patchen :)Angenommen, es ist in Ordnung, den Festschreibungsverlauf zu ändern, finden Sie hier einen Workflow zum Zurücksetzen von Änderungen in einer einzelnen Datei in einem früheren Festschreiben:
Beispielsweise möchten Sie Änderungen in 1 Datei (
badfile.txt
) in Festschreiben zurücksetzenaaa222
:Starten Sie das Basis-Commit neu, ändern Sie das Problem-Commit und fahren Sie fort.
1) Starten Sie die interaktive Rebase:
2) Markieren Sie das Problem-Commit für die Bearbeitung im Editor, indem Sie
pick
zue
(zur Bearbeitung) wechseln :3) Änderungen an der fehlerhaften Datei rückgängig machen:
4) Fügen Sie die Änderungen hinzu und ändern Sie das Commit:
5) Beenden Sie die Rebase:
quelle
edit
nicht als geändert angezeigt wurden . Aber dasgit show -- badfile.txt | git apply -R
gab die Antwort, die ich brauchte <3git revert
ist für alle Dateiinhalte innerhalb eines Commits.Für eine einzelne Datei können Sie ein Skript erstellen :
(Aus den Git-Shell-Scripts- Dienstprogrammen von smtlaissezfaire )
Hinweis:
Ein anderer Weg wird hier beschrieben, wenn Sie Ihre aktuelle Änderung noch nicht festgeschrieben haben.
git checkout
hat einige Optionen für eine Datei, ändert die Datei von HEAD und überschreibt Ihre Änderung.Dropped.on.Caprica erwähnt in den Kommentaren :
quelle
git revert-file <hash> <file-loc>
diese bestimmte Datei zurücksetzen können. Ich habe diese Antwort aufgehoben (obwohl ich einige Änderungen vornehmen musste, um richtig zu funktionieren). Eine Kopie meines.gitconfig
und des bearbeiteten Skripts finden Sie hier: gist.github.com/droppedoncaprica/5b67ec0021371a0ad438Ich würde einfach die
--no-commit
Option verwenden,git-revert
um die Dateien, die Sie nicht zurücksetzen möchten, aus dem Index zu entfernen, bevor ich sie endgültig festschreibe. Hier ist ein Beispiel, das zeigt, wie Sie einfach nur die Änderungen an foo.c im zweitletzten Commit zurücksetzen können:Das erste
git-reset
"Staging" aller Dateien, so dass wir dann nur die eine Datei wieder hinzufügen können, die zurückgesetzt werden soll. Das Finale entferntgit-reset --hard
die verbleibenden Dateiwiederherstellungen, die wir nicht behalten möchten.quelle
Viel einfacher:
dann
und dann
Die Datei ist verschwunden und Commit-Hash, Nachricht usw. sind identisch.
quelle
git checkout -- path/to/file/to/revert
Schritt? Es ist auch nicht wahr, dass der Hash danach der gleiche ist, oder? Der letzte Satz könnte besser sein als: "Das Ergebnis ist, dass das letzte Commit durch ein neues ersetzt wird, das sich nur dadurch unterscheidet, dass es die Änderungen an der zurückgesetzten Datei nicht enthält."Der obige Befehl entfernt die Datei aus dem Commit, spiegelt sich jedoch in wider
git status
.Der obige Befehl setzt die Änderungen zurück (als Ergebnis erhalten Sie die gleiche Datei wie HEAD).
(Pass
--amend
zur Änderung des Commits.)Damit wird die Datei, die sich bereits im Commit befindet, entfernt und zurückgesetzt.
Die obigen Schritte sollten von dem Zweig aus ausgeführt werden, in dem das Commit ausgeführt wird.
quelle
Sie können wie folgt vorgehen:
git revert -n <*commit*>
(-n
Alle Änderungen rückgängig machen, aber nicht festschreiben)git add <*filename*>
(Name der Datei (en), die Sie zurücksetzen und festschreiben möchten)git commit -m 'reverted message'
(Nachricht zum Zurücksetzen hinzufügen)quelle
Wenn Sie die Änderungen an einer Datei aus Ihrem letzten Commit zurücksetzen möchten, verwende ich diese normalerweise. Ich denke, das ist die einfachste Lösung.
Bitte beachten Sie, dass die Datei dem Staging-Bereich hinzugefügt wird.
Ich hoffe es hilft :)
quelle