我刚刚读了 在 git 中修改过去提交的单个文件,但不幸的是,接受的解决方案“重新排序”提交,这不是我想要的。所以我的问题是:
在处理一个(不相关的)特性时,我会时不时地注意到代码中的一个 bug。然后,快速的 git blame
显示 bug 在几次提交之前就已经被引入了(我提交了很多次,所以通常不是最近的提交引入了 bug)。这个时候,我通常会这样做:
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.
也许是一个可以使用管道工具重写提交的智能脚本?