ฉันเพิ่งอ่าน แก้ไขไฟล์เดียวในการกระทำที่ผ่านมาในคอมไพล์แต่น่าเสียดายที่โซลูชันที่ยอมรับได้ 'เรียงลำดับ' คอมมิตใหม่ซึ่งไม่ใช่สิ่งที่ฉันต้องการ นี่คือคำถามของฉัน:
ทุก ๆ ครั้งฉันสังเกตเห็นข้อผิดพลาดในโค้ดของฉันในขณะที่ทำงานกับคุณสมบัติ (ไม่เกี่ยวข้อง) 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
อย่างไรก็ตามเหตุการณ์นี้เกิดขึ้นบ่อยครั้งจนลำดับข้างต้นน่ารำคาญ โดยเฉพาะอย่างยิ่ง 'rebase แบบโต้ตอบ' นั้นน่าเบื่อ มีทางลัดไปยังลำดับข้างต้นหรือไม่ที่ช่วยให้ฉันแก้ไขการกระทำตามอำเภอใจในอดีตด้วยการเปลี่ยนแปลงแบบทีละขั้น ฉันรู้ดีว่าสิ่งนี้เปลี่ยนแปลงประวัติศาสตร์ แต่ฉันทำผิดพลาดบ่อยมากจนอยากจะมีอะไรแบบนี้
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
ที่จริงแล้วมีปัญหาที่อาจเกิดขึ้นกับคำตอบที่ผมคิดว่ามันควรจะเป็น ตามที่เขียนไว้มันจะพยายามใช้การกระทำที่ไม่ดีกับสถานะการคอมมิตคงที่