git 更改中间提交而不更改稍后的提交

  • 本文关键字:提交 中间 git git rebase
  • 更新时间 :
  • 英文 :


这种情况偶尔发生在我身上(嗯,也许经常(:

注意:在我推送之前,以下所有情况都会发生。

我的软件项目需要新功能。 我编码并测试直到它起作用。 我不得不为新功能腾出空间,所以我使用git add -i将更改分为两个提交:

A --- R --- F

提交R引入了重构更改,F为新功能添加代码。

现在我意识到我在划分更改时犯了错误,因此F中的一些实际上已经属于R,反之亦然。 所以,基本上,R搞砸了,没有通过测试(而F的最终状态是完美的(。

为了解决这个问题,我签出临时分支上的R并修复了所有问题。 我git commit --amend,现在我有

A --- R --- F

-- R'

因此,现在缺少的只是将F移动到新分支。 到目前为止,我的解决方案是做git rebase --onto R-prime R F(我实际上使用分支名称,但你明白我的意思(。 问题在于它不完全是我想要的:git明白我想将RF之间的更改移动到R'上,给我一个可能与F不同的提交F'。 但是,我希望F'F完全相同,除了它的祖先。 通常,rebase会导致难以修复(即容易出错(的冲突。

有没有办法告诉git我想移动F的快照,而不是差异RF

假设你当前的 HEAD 在R',它应该是这样的(替换哈希而不是FR'(

git reset --hard F
git reset --soft R'
git commit -c F

它按原样从F中获取树,并将其作为R'的子级提交,替换来自F的提交消息并调用编辑器,您想更改它

最新更新