Ich habe gerade gelesen, wie ich eine einzelne Datei in einem früheren Commit in Git geändert habe, aber leider "ordnet" die akzeptierte Lösung die Commits neu, was nicht das ist, was ich will. Hier ist meine Frage:
Hin und wieder bemerke ich einen Fehler in meinem Code, während ich an einer (nicht verwandten) Funktion arbeite. Ein kurzer git blame
Blick zeigt dann, dass der Fehler vor einigen Commits eingeführt wurde (ich begebe ziemlich viel, daher ist es normalerweise nicht das letzte Commit, das den Fehler verursacht hat). An diesem Punkt mache ich normalerweise Folgendes:
git stash # temporarily put my work aside
git rebase -i <bad_commit>~1 # rebase one step before the bad commit
# mark broken commit for editing
vim <affected_sources> # fix the bug
git add <affected_sources> # stage fixes
git commit -C <bad_commit> # commit fixes using same log message as before
git rebase --continue # base all later changes onto this
Dies passiert jedoch so oft, dass die obige Sequenz nervt. Besonders die "interaktive Rebase" ist langweilig. Gibt es eine Verknüpfung zu der obigen Sequenz, mit der ich ein beliebiges Commit in der Vergangenheit mit den inszenierten Änderungen ändern kann? Ich bin mir vollkommen bewusst, dass dies die Geschichte verändert, aber ich mache so oft Fehler, dass ich wirklich gerne so etwas hätte
vim <affected_sources> # fix bug
git add -p <affected_sources> # Mark my 'fixup' hungs for staging
git fixup <bad_commit> # amend the specified commit with staged changes,
# rebase any successors of bad commit on rewritten
# commit.
Vielleicht ein intelligentes Skript, das Commits mit Sanitärwerkzeugen oder so umschreiben kann?
rebase -i
?
rebase --onto tmp bad-commit master
. Wie geschrieben wird versucht, das fehlerhafte Festschreiben auf den festen Festschreibungsstatus anzuwenden.