Je viens de lire la modification d'un seul fichier dans un commit passé dans git mais malheureusement la solution acceptée «réorganise» les commits, ce qui n'est pas ce que je veux. Alors voici ma question:
De temps en temps, je remarque un bogue dans mon code en travaillant sur une fonctionnalité (non liée). Un rapide git blame
révèle ensuite que le bogue a été introduit il y a quelques commits (je commets beaucoup, donc généralement ce n'est pas le commit le plus récent qui a introduit le bogue). À ce stade, je fais généralement ceci:
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
Cependant, cela arrive si souvent que la séquence ci-dessus devient ennuyeuse. Surtout le «rebase interactif» est ennuyeux. Existe-t-il un raccourci vers la séquence ci-dessus, qui me permet de modifier un commit arbitraire dans le passé avec les modifications par étapes? Je suis parfaitement conscient que cela change l'histoire, mais je fais des erreurs si souvent que j'aimerais vraiment avoir quelque chose comme
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.
Peut-être un script intelligent qui peut réécrire les commits à l'aide d'outils de plomberie ou plus?
rebase -i
?
rebase --onto tmp bad-commit master
. Tel qu'il est écrit, il essaiera d'appliquer le mauvais commit à l'état de commit fixe.