我只是在过去的git commit中读取了修改单个文件的信息但是不幸的是,被接受的解决方案对提交进行了“重新排序”,这不是我想要的。所以这是我的问题:
时不时地,我在使用(无关)功能时注意到代码中的错误。然后快速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
。如所写,它将尝试将错误的提交应用于固定的提交状态。