Saya baru saja membaca mengubah satu file di masa lalu komit di git tapi sayangnya solusi yang diterima 'menyusun ulang' komit, yang bukan yang saya inginkan. Jadi inilah pertanyaan saya:
Sesekali, saya melihat bug dalam kode saya saat mengerjakan fitur (tidak terkait). A quick git blame
kemudian mengungkapkan bahwa bug telah diperkenalkan beberapa komit yang lalu (saya melakukan cukup banyak, jadi biasanya itu bukan komit terbaru yang memperkenalkan bug). Pada titik ini, saya biasanya melakukan ini:
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
Namun, hal ini sering terjadi sehingga urutan di atas semakin mengganggu. Terutama 'rebase interaktif' yang membosankan. Apakah ada jalan pintas ke urutan di atas, yang memungkinkan saya mengubah komit arbitrer di masa lalu dengan perubahan bertahap? Saya sangat sadar bahwa ini mengubah sejarah, tetapi saya sering melakukan kesalahan sehingga saya sangat ingin memiliki sesuatu seperti itu
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.
Mungkin skrip cerdas yang dapat menulis ulang komitmen menggunakan alat pipa atau lebih?
rebase -i
?
rebase --onto tmp bad-commit master
. Seperti yang tertulis, ini akan mencoba menerapkan komit buruk ke status komit tetap.