我的首席技术人员今天要求我从分支中删除所有测试。我有4个提交,每个提交都包含测试。我不想做一个额外的承诺,从中删除所有测试,因为在我看来,这看起来很混乱。
相反,我希望编辑现有的提交。我可以执行git commit --interactive
并用edit
标记提交,但我无法选择性地选择要丢弃的块。为此,我尝试了git reset --soft HEAD~
,并只保留我想要的更改(例如,能够使用git reset
(。然而,当我这样做,然后git rebase --continue
,git告诉我已经取消了更改,尽管我没有。
在编辑历史中的git提交时,有没有办法将所有更改都返回到索引中?
编辑:
@jonrsharpe有一个额外的承诺,说明为什么删除测试,难道不是更好地记录了实际发生的事情吗?
可能是的,但即使这是我最终决定的,我也宁愿使用git工具删除测试,而不是手动编辑文件。这需要查看索引中4个提交的更改。
这听起来像是来自您的首席技术人员的一个奇怪的请求,但如果您的提交只添加测试,而以后的提交不更改测试,那么这实际上应该很容易。
您进行交互式重新基准编辑提交的策略听起来不错。
编辑提交的过程类似于:
git reset --soft HEAD^
git add -i <files> # assuming your test code is in files that have other changes
git commit
git reset --hard
我怀疑你错过了最后的硬重置。
在进行软重置后,您处于上一次提交,但您正在编辑提交中的所有更改。交互式添加文件将允许您提交与工作副本中的文件不完全对应的内容。在提交之后,您仍然处于这样一种状态,即您选择不提交的原始提交的更改都在您的工作副本中,您需要删除这些更改,以便git继续进行rebase。
进行硬重置将更改工作副本以匹配您重置到的提交,从而丢弃任何本地更改;在这种情况下,使您的工作副本与您刚才提交的内容相匹配。
如果你的测试是在单独的文件中,那么编辑步骤更容易,它只是:
git rm <test files>
git commit --amend
然后继续你的基础。