Ich habe zwei Dateien geändert a
, b
in den letzten begehen. Aber die Datei b
sollte nicht festgeschrieben werden. Wie sieht der Workflow aus, um dies zu ändern?
Update (einige Jahre später)
Es ist trivial, es nur aus dem Index zu entfernen.
True: Sie können eine Datei einfach auf ihren Indexinhalt zurücksetzen, wie die neuere Antwort (geschrieben von Matt Connolly ) besagt:
git reset HEAD^ path/to/file/to/revert
HEAD^
Ermöglicht der Datei den Zugriff auf den Inhalt des vorherigen Commits vor dem letzten.
Dann kannst du git commit --amend
, wie ich unten ursprünglich schrieb.
Mit Git 2.23 (August 2019) können Sie den neuen git restore
Befehl verwenden
git restore --source=HEAD^ --staged -- path/to/file/to/revert
kürzer:
git restore -s@^ -S -- path/to/file/to/revert
Auch das kannst du dann git commit --amend
, wie ich ursprünglich unten schrieb.
Ursprüngliche Antwort (Januar 2011)
Wenn dies Ihr letztes Commit ist (und Sie haben es nirgendwo gepusht), können Sie es ändern :
(Erstes Stash oder Speichern b
)
git commit --amend
Löschen Sie anschließend b und wiederholen Sie die Festschreibung. Stellen Sie b wieder her und Sie sind fertig.
--amend
Dient zum Ändern der Spitze des aktuellen Zweigs.
Bereiten Sie das Tree-Objekt vor, das Sie wie gewohnt durch das letzte Commit ersetzen möchten (einschließlich der üblichen -i / -o-Pfade und expliziten Pfade), und der Commit-Protokoll-Editor wird mit der Commit-Nachricht aus der Spitze des aktuellen Zweigs versehen.
Das von Ihnen erstellte Commit ersetzt den aktuellen Tipp. Wenn es sich um eine Zusammenführung handelte, werden die Eltern des aktuellen Tipps als Eltern verwendet. Das aktuelle oberste Commit wird verworfen.
... Then stash/delete b, re-commit..
, hier sollte das Wort nichtThen
seinafter
? ---amend
nach stach / delete b, ...git diff --name-only HEAD^
- (optional) Verwenden Sie diese Option, um die Dateien aufzulisten, die sich beim letzten Festschreiben geändert haben.git reset HEAD^ path/to/file/to/revert
- um den Index auf die letzte Version zurückzusetzen, wobei die Arbeitskopie unverändert bleibt.git commit --amend
- zu ändern , dass sich verpflichten, zuletzt die umfassen Indexänderungenquelle
git commit -a --amend
Schritt 3 nicht verwenden (dh keine Dateien hinzufügen) sollten, da Sie sonst die Änderungen an der Arbeitskopie festschreiben, bei denen es sich um die Änderungen handelt, die Sie entfernen möchten. Ein optionaler Schritt 2.5 könnte darin bestehengit checkout path/to/file/to/revert
, auch Ihre Arbeitskopie zu bereinigen.git rm --cached path/to/file/to/revert
die Datei auch entfernen, ohne sie aus dem Baum zu löschen.Wenn Sie alternativ verwenden
git gui
, wählen Sie einfach die Option "Last Commit ändern". Die hinzugefügte Datei wird in der Liste "Staged" angezeigt. Klicken Sie auf das entsprechende Symbol, um sie in die Liste "Unstaged" zu verschieben und zu bestätigen.quelle
Wenn Sie b aus Ihrem letzten Commit löschen möchten
Wenn Sie alle Änderungen an b in Ihrem letzten Commit entfernen möchten
quelle
git rm --cached
und den Backup / Restore-Tanz (-1) abschaffen.Eine Alternative, die keine Index-Hacker-Attacke erfordert, aber dennoch die alte Commit-Nachricht beibehält:
Das gefällt mir, weil (a) Befehle verwendet werden, die ich regelmäßig verwende, und (b) ich kann
git add -p
genau herausfinden, was ich festschreiben möchte.quelle