Interaktiv neu gründen con --autosquash
ist etwas, das ich häufig verwende, wenn ich frühere Übertragungen tiefer in der Historie korrigieren muss. Es beschleunigt im Wesentlichen den Prozess, den ZelluXs Antwort illustriert, und ist besonders praktisch, wenn Sie mehr als einen Commit haben, den Sie bearbeiten müssen.
Aus der Dokumentation:
--autosquash
Wenn die Commit-Log-Meldung mit "squash! " (oder "fixup! ") beginnt und es einen Commit gibt, dessen Titel mit demselben beginnt, wird die ToDo-Liste von rebase -i automatisch so geändert, dass der Commit, der zum Squash markiert ist, direkt nach dem zu ändernden Commit kommt
Angenommen, Sie haben einen Verlauf, der wie folgt aussieht:
$ git log --graph --oneline
* b42d293 Commit3
* e8adec4 Commit2
* faaf19f Commit1
und Sie haben Änderungen, die Sie an Commit2 anpassen möchten, dann übertragen Sie Ihre Änderungen mit
$ git commit -m "fixup! Commit2"
alternativ können Sie die Commit-sha anstelle der Commit-Nachricht verwenden, also "fixup! e8adec4
oder auch nur ein Präfix der Commit-Nachricht.
Starten Sie dann ein interaktives Rebase für die Übergabe vor
$ git rebase e8adec4^ -i --autosquash
Ihr Editor öffnet sich mit den bereits korrekt geordneten Übertragungen
pick e8adec4 Commit2
fixup 54e1a99 fixup! Commit2
pick b42d293 Commit3
alles was Sie tun müssen, ist speichern und beenden
52 Stimmen
Eine alternative Antwort finden Sie hier: stackoverflow.com/a/18150592/520567 Die von Ihnen akzeptierte Antwort ist eigentlich eine exakte Antwort auf Ihre Frage, aber wenn Sie Ihren neuen Commit schon fertig haben, bevor Sie sich entschlossen haben, edit zu verwenden, dann wäre diese Antwort einfacher. Es kann auch mit mehreren Commits funktionieren, die Sie zusammen mit einem älteren Commit zusammenführen/verschmelzen wollen.
7 Stimmen
Sie können auch einfach sehen Aufteilen einer Übertragung en Git-Tools - Geschichte neu schreiben für weitere Informationen.
1 Stimmen
Mögliches Duplikat von Wie kann man bestehende, nicht veröffentlichte Commits ändern?