Tôi chỉ đọc sửa đổi một tệp duy nhất trong một cam kết trước đây trong git nhưng không may là giải pháp được chấp nhận 'sắp xếp lại' các cam kết, đó không phải là điều tôi muốn. Vì vậy, đây là câu hỏi của tôi:
Thỉnh thoảng, tôi nhận thấy một lỗi trong mã của mình khi làm việc trên một tính năng (không liên quan). git blame
Sau đó nhanh chóng tiết lộ rằng lỗi đã được đưa vào một vài lần cam kết trước (tôi đã cam kết khá nhiều, vì vậy thường nó không phải là lần cam kết gần đây nhất đã giới thiệu lỗi). Tại thời điểm này, tôi thường làm điều này:
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
Tuy nhiên, điều này xảy ra thường xuyên khiến trình tự trên trở nên khó chịu. Đặc biệt là 'rebase tương tác' là nhàm chán. Có bất kỳ phím tắt nào cho chuỗi trên, cho phép tôi sửa đổi một cam kết tùy ý trong quá khứ với các thay đổi theo giai đoạn không? Tôi hoàn toàn biết rằng điều này làm thay đổi lịch sử, nhưng tôi thường xuyên mắc sai lầm nên tôi thực sự muốn có những thứ như
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.
Có thể là một tập lệnh thông minh có thể viết lại các cam kết bằng cách sử dụng các công cụ đường ống dẫn nước hoặc tương tự?
rebase -i
sao?
rebase --onto tmp bad-commit master
. Như đã viết, nó sẽ cố gắng áp dụng cam kết xấu vào trạng thái cam kết cố định.