4

我有一个包含各种提交的存储库,我想将它们合并到两个补丁中。一个补丁介绍了该功能,另一个补丁更改了现有代码以使用它。问题是,当我在编码和提交时,我并没有考虑到这一点,所以有些提交两者都做。如何拆分这些提交?

我知道我可以以某种方式使用 git rebase -i 并为我想更改的每个提交选择编辑,但是这样我只能更改提交消息,而不是代码

4

2 回答 2

4

Gitrebase允许你拆分提交

在交互模式下,您可以使用“编辑”操作标记提交。但是,这并不一定意味着 git rebase 期望此编辑的结果恰好是一次提交。实际上,您可以撤消提交,也可以添加其他提交。这可用于将提交分成两部分:

  • 使用 git rebase -i ^ 启动交互式 rebase,您要拆分的提交在哪里。事实上,任何提交范围都可以,只要它包含该提交。

  • 使用“编辑”操作标记要拆分的提交。

  • 在编辑该提交时,执行 git reset HEAD^。效果是 HEAD 倒带一,索引也随之而来。但是,工作树保持不变。

  • 现在将更改添加到您希望在第一次提交中拥有的索引。您可以使用 git add (可能以交互方式)或 git gui (或两者)来做到这一点。

  • 使用现在合适的任何提交消息提交当前索引。

  • 重复最后两个步骤,直到您的工作树干净为止。

  • 使用 git rebase --continue 继续 rebase。

如果您不确定中间版本是否一致(它们可以编译、通过测试套件等),您应该使用 git stash 在每次提交后隐藏尚未提交的更改,测试并修改提交(如果修复)是必要的。

于 2012-07-18T12:30:29.477 回答
1

这是我要做的:

git reset COMMIT_BEFORE_CHANGES --soft

并在适当的提交中重新提交所有内容。--soft将使您的工作树和索引保持在重置之前的状态。

不用说,在有人离开你之后,你不应该做这样的事情。

于 2012-07-18T12:16:32.997 回答