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

jak*_*b.g 19 git git-rebase

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

与此同时,我开始在(== )newFeature分叉的分支机构工作.我已经添加了,,.oldFeatureHEADB1CDE

同时,我得到了代码审查结果,不得不修改B1,更改newfile.txt和更改一些现有文件.修复后,它变成了B2.

所以说明一下:

newFeature   oldFeature
A             A
B1            B2 [B1 with some fixes]
C
D
E
Run Code Online (Sandbox Code Playgroud)

现在,我在newFeature,我想变基newFeatureB2代替B1.当我简单地执行rebase时,由于newfile.txt在rebase的两个部分中添加了冲突,我已经改变了冲突.

我想保留oldFeature(B2)的版本.

我不能动B1HEAD,因为C,D,E依赖于它.

我知道我可以做以下的解决方法:

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

newFeature   oldFeature
A             A
B2            B2
BX
C
D
E
Run Code Online (Sandbox Code Playgroud)

BX或多或少B2\B1在哪里存在的文件A.现在我可以进行交互式rebase并删除BX.

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

newFeature   oldFeature
A             A
B2            B2
B2\B1
C
D
E
Run Code Online (Sandbox Code Playgroud)

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

newFeature   oldFeature
A             A
B2            B2
C
D
E
Run Code Online (Sandbox Code Playgroud)

使用Git 1.8.0.

Von*_*onC 17

你可以做一个rebase交互:

git checkout new_feature
git rebase --interactive old_feature
Run Code Online (Sandbox Code Playgroud)

并删除B1:您只需删除B1行:

# If you remove a line here THAT COMMIT WILL BE LOST
Run Code Online (Sandbox Code Playgroud)