每当我想重写一个提交只保留差异的一部分时,我就会经历这个(从头顶开始,有些东西可能会关闭):
git rebase -i COMMIT~1
然后选择e
进行修改。
git reset HEAD~1
git add -p # select the part I want
git checkout HEAD -- :/ # discard changes not selected
git stash
git reset COMMIT
git checkout HEAD~1 -- :/
git commit -u --amend
git stash pop
git commit --amend
git rebase --continue
显然,这是一个糟糕的工作流程。问题是重置允许我选择我想要的更改,但是通过移动HEAD我停止能够修改相关提交。
我试图做一个git checkout HEAD~1 -- :/
一旦我想要修改并选择反向差异,但它只是让人感到困惑。
什么是更好的选择?
答案 0 :(得分:2)
如果对上一次提交进行软重置,则可以在不进行交互式rebase的情况下重做上次提交:
git reset head~1 --soft
这也可以轻松将单个提交转换为多个较小的提交。
但是,这可能只适用于重做 last 提交。如果您为多次提交(即head~2
)执行此操作,则会在暂存区域中收集过去两次提交的所有更改。这仍然很有用,但与您描述的所需工作流程不同。