我们假设我们有一个分支结构,如:
develop -> --- a --- b --- c
\ \
feature 1 -> \ --- d --- e
\
feature 2 -> --- f --- g
在完成功能1的工作后,我认为它确实应该作为功能2的子任务分支。
功能1是否有办法撤消'在保留其提交的同时,分支开发和分支功能2?
示例:
develop -> --- a --- b --- c
\
feature 1 -> \ --- d --- e
\ /
feature 2 -> f --- g
答案 0 :(得分:6)
最简单的解决方案是使用带有--onto
标志的rebase,如Git book中所述。命令:
git rebase --onto feature2 develop feature1
将来自feature1
的{{1}}上的develop
提交重新提交。
答案 1 :(得分:0)
通常情况下你会看git rebase
这类事情,但它不会起作用,因为从feature1到feature2的rebase将包含提交b和c,你不会这样做想。
Willem建议使用cherry-pick
可能是要走的路。
创建一个新分支:
git checkout -b feature1b feature1
Cherry选择了感兴趣的提交(这里我说" feature1&#34的最后两次提交,但是你可以使用实际的提交ID指定提交范围等):
git cherry-pick feature1~2..feature1
此时,分支feature1b
与您想要的历史记录相匹配。您可以根据需要执行一些可选的清理:
删除旧分支:
git branch -D feature1
重命名新分支:
git branch -m feature1