Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
git更改中间提交而不更改后面的提交_Git_Rebase - Fatal编程技术网

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

git更改中间提交而不更改后面的提交,git,rebase,Git,Rebase,这种情况偶尔发生在我身上(嗯,可能经常发生): 注意:在我按下按钮之前,会发生以下所有情况 我的软件项目需要一个新功能。 我编写代码并测试,直到它工作。 我不得不为新特性腾出空间,所以我使用git add-I将更改分为两次提交: A --- R --- F 提交R引入重构更改,F为新功能添加代码 现在我意识到我在划分更改时犯了错误,因此F中的一些更改实际上已经属于R,反之亦然。 因此,基本上,R混乱不堪,无法通过测试(而F的最终状态是完美的) 为了解决这个问题,我在一个临时分支上签出R,然后修

这种情况偶尔发生在我身上(嗯,可能经常发生):

注意:在我按下按钮之前,会发生以下所有情况

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

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

现在我意识到我在划分更改时犯了错误,因此
F
中的一些更改实际上已经属于
R
,反之亦然。 因此,基本上,
R
混乱不堪,无法通过测试(而
F
的最终状态是完美的)

为了解决这个问题,我在一个临时分支上签出
R
,然后修复所有问题。 我
git提交--amend
现在我有了

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


有没有办法告诉git我想移动
F
的快照,而不是diff
R
F

假设您当前的头部位于
R'
,它应该是这样的(用哈希代替
F
R'


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

我了解发生了什么,但这不是我在午夜睡觉前要做的事情。。。无论如何谢谢你!
git reset --hard F
git reset --soft R'
git commit -c F