我在一个分支development
上,并创建了一个新分支feature1
。我编写了功能1,感到很高兴,因此决定开始进行功能2的工作。因此,我创建了一个新分支feature2
并进行了一次提交。不好了!现在我的树看起来像这样:
dev <- . <- . <- feature1 <- feature2
但是feature1
和feature2
应该都从dev
分支出来,像这样:
dev <- . <- . <- feature1
^
\--- feature2
如何获得此结果?我整夜都在尝试各种形式的git rebase
,但没有任何乐趣。
答案 0 :(得分:1)
假设分支的名称如图所示,那么rebase命令应如下所示:
git rebase feature1 feature2 --onto dev
git rebase
的一种语法是:
git rebase <upstream> <branch> --onto <newbase>
如果指定了<branch>
,则Git首先执行git checkout <branch>
。然后,它计算<upstream>
与当前已签出分支之间的基本提交。在我们的例子中,feature1
本身是基本提交,因为它是feature2
的祖先。接下来,Git将获取当前已检出分支的所有提交,直到该基本提交,然后将其应用于<newbase>
。
答案 1 :(得分:0)
一个选项:
git checkout feature2
git rebase -i dev
# Delete all commits between 'dev' and feature2
答案 2 :(得分:0)
这可以通过首先创建新分支来完成:
git checkout -b feature2 dev
接着是摘樱桃:
git cherry-pick feature1
然后回到旧分支并从那里删除提交:
git checkout feature1
git reset @^ --hard