我有一个包含各种提交的存储库,我希望将它们合并为两个补丁。 一个补丁引入该功能,另一个修改现有代码以使用它。 问题是,当我编码和提交时,我没有考虑到这一点,所以有提交两者都做。我该如何拆分这些提交?
我知道我可以用git rebase -i和我想改变的每个提交选择编辑,但这样我只能更改提交消息,而不是代码
答案 0 :(得分:3)
Git rebase
允许您split commits:
在交互模式下,您可以使用“编辑”操作标记提交。但是,这并不一定意味着git rebase期望此编辑的结果恰好是一次提交。实际上,您可以撤消提交,也可以添加其他提交。这可以用于将提交拆分为两个:
使用git rebase -i ^启动交互式rebase,其中是您要拆分的提交。实际上,任何提交范围都可以,只要它包含该提交。
使用“编辑”操作标记要分割的提交。
在编辑提交时,执行git reset HEAD ^。结果是HEAD被一个重绕,索引也随之而来。但是,工作树保持不变。
现在将更改添加到您希望在第一次提交中拥有的索引。您可以使用git add(可能是交互式)或git gui(或两者)来做到这一点。
使用现在适当的提交消息提交now-current索引。
重复最后两步,直到工作树干净。
使用git rebase继续rebase - 继续。
如果您不完全确定中间修订版是否一致(它们是编译,通过测试套件等),您应该使用git stash在每次提交,测试和修改之后隐藏尚未提交的更改如果需要修复则提交。
答案 1 :(得分:1)
以下是我要做的事情:
git reset COMMIT_BEFORE_CHANGES --soft
并在相应的提交中重新提交所有内容。 --soft
会使您的工作树和索引处于重置前的状态。
毋庸置疑,在有人撤离你之后,你不应该这样做。