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

时间:2017-08-24 06:43:05

标签: 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

1 个答案:

答案 0 :(得分:1)

假设您当前的HEAD位于R',则应该是(替换哈希而不是FR'

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

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