我有一个包含各种提交的存储库,我想将它们合并到两个补丁中。一个补丁介绍了该功能,另一个补丁更改了现有代码以使用它。问题是,当我在编码和提交时,我并没有考虑到这一点,所以有些提交两者都做。如何拆分这些提交?
我知道我可以以某种方式使用 git rebase -i 并为我想更改的每个提交选择编辑,但是这样我只能更改提交消息,而不是代码
在交互模式下,您可以使用“编辑”操作标记提交。但是,这并不一定意味着 git rebase 期望此编辑的结果恰好是一次提交。实际上,您可以撤消提交,也可以添加其他提交。这可用于将提交分成两部分:
使用 git rebase -i ^ 启动交互式 rebase,您要拆分的提交在哪里。事实上,任何提交范围都可以,只要它包含该提交。
使用“编辑”操作标记要拆分的提交。
在编辑该提交时,执行 git reset HEAD^。效果是 HEAD 倒带一,索引也随之而来。但是,工作树保持不变。
现在将更改添加到您希望在第一次提交中拥有的索引。您可以使用 git add (可能以交互方式)或 git gui (或两者)来做到这一点。
使用现在合适的任何提交消息提交当前索引。
重复最后两个步骤,直到您的工作树干净为止。
使用 git rebase --continue 继续 rebase。
如果您不确定中间版本是否一致(它们可以编译、通过测试套件等),您应该使用 git stash 在每次提交后隐藏尚未提交的更改,测试并修改提交(如果修复)是必要的。
这是我要做的:
git reset COMMIT_BEFORE_CHANGES --soft
并在适当的提交中重新提交所有内容。--soft
将使您的工作树和索引保持在重置之前的状态。
不用说,在有人离开你之后,你不应该做这样的事情。