私はgitの過去のコミットで1つのファイルの修正を読んだだけですが、残念ながら、受け入れられたソリューションはコミットを「並べ替え」ます。これは私が望んでいることではありません。だから私の質問です:
(無関係な)機能に取り組んでいるときに、コードにバグがあることに時々気づきます。すぐにgit blame
、バグが数コミット前に導入されたことを明らかにします(私はかなりたくさんコミットしているので、通常、バグを導入したのは最新のコミットではありません)。この時点で、私は通常これを行います:
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
ただし、これは頻繁に発生するため、上記のシーケンスは煩わしくなります。特に「インタラクティブなリベース」は退屈です。上記のシーケンスへのショートカットはありますか?これにより、過去の任意のコミットを段階的な変更で修正できますか?これが歴史を変えることを私は完全に認識していますが、私は間違いをしていることが多いので、次のようなものが本当に好きです
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.
配管ツールなどを使用してコミットを書き換えることができるスマートスクリプトでしょうか?
rebase -i
ですか?
rebase --onto tmp bad-commit master
。書かれているように、それは不良コミットを固定コミット状態に適用しようとします。