说我正在处理分支oldFeature
中的某个功能。我已完成提交A
和B1
并将其发送给代码审核。在B1
我更改了一些现有文件,但也添加了newfile.txt
。
与此同时,我开始在分支newFeature
工作,分支来自oldFeature
(HEAD
== B1
)。我添加了C
,D
,E
。
与此同时,我收到了代码审核结果,并且必须修改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
,我已经重新定义了冲突。
我想保留oldFeature
(B2
)的版本。
我无法将B1
移至HEAD
,因为C
,D
,E
依赖于此。
我知道我可以执行以下解决方法:
git checkout --theirs
git add
然后我会遇到这样的情况:
newFeature oldFeature
A A
B2 B2
BX
C
D
E
其中BX
对B2\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。
答案 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