如何在Git rebase中用另一个提交替换提交?

时间:2013-01-29 18:51:11

标签: git git-rebase

说我正在处理分支oldFeature中的某个功能。我已完成提交AB1并将其发送给代码审核。在B1我更改了一些现有文件,但也添加了newfile.txt

与此同时,我开始在分支newFeature工作,分支来自oldFeatureHEAD == B1)。我添加了CDE

与此同时,我收到了代码审核结果,并且必须修改B1,更改newfile.txt,以及更改现有文件。修复后,它变为B2

所以说明一下:

newFeature   oldFeature
A             A
B1            B2 [B1 with some fixes]
C
D
E

现在我在newFeature,我希望将newFeature重新定义为B2而不是B1。当我简单地执行rebase时,由于在rebase的两个部分中添加了newfile.txt,我已经重新定义了冲突。

我想保留oldFeatureB2)的版本。

我无法将B1移至HEAD,因为CDE依赖于此。

我知道我可以执行以下解决方法:

然后我会遇到这样的情况:

newFeature   oldFeature
A             A
B2            B2
BX
C
D
E

其中BXB2\B1中存在的文件大概A。 现在我可以进行交互式rebase并删除BX

然而,我的解决方法有点令人费解。有更简单的方法吗?我的意思是更简单,我要么

newFeature   oldFeature
A             A
B2            B2
B2\B1
C
D
E

没有任何rebase冲突,然后我可以摆脱B2\B1提交,或者自动替换它们以便我得到

newFeature   oldFeature
A             A
B2            B2
C
D
E

使用Git 1.8.0。

1 个答案:

答案 0 :(得分:17)

你可以做rebase interactive

git checkout new_feature
git rebase --interactive old_feature

并删除B1:您只需删除包含B1的行:

# If you remove a line here THAT COMMIT WILL BE LOST