2017-08-24 66 views
1

这发生在我身上偶尔(好吧,也许频繁):git的变更中承诺而没有后续变化一个

注意:下面的一切发生了,我推了。

我的软件项目需要一个新功能。 我编码并测试,直到它工作。 我不得不腾出空间给新的功能,所以我把使用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明白我想移动改变R'之间RF到,给我一个承诺F'可能因F不同。 但是,我想要F'F完全一样,除了它的祖先。 通常,rebase会导致难以解决的冲突(即容易出错)。

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

回答

1

假设您目前的HEAD是R',它应该像(替代散列而不是FR'

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

它采用树从F原样,并提交它作为R'孩子,代从F提交消息,并调用编辑器,你想改变它

+0

我明白发生了什么,但这不是我在午夜睡觉前做的事情......无论如何,谢谢! – user189