我是Git的新手,希望获得帮助。这个问题类似于Move the most recent commit(s) to a new branch with Git,但该问题询问最近的提交。这不是我所需要的。让我进一步解释...
我有一个分支,称之为Feature1分支。 Feature1的父级是master分支,Feature1包含以下提交:
但是,A和B提交实际上并不属于该特定分支,应该确实位于另一个分支中,而该分支将是Feature1分支的子级。让我们将这个假设分支A和B称为Feature2分支。同样,该分支必须从Feature1分支中退出,而不是从master分支中退出。
此Feature2分支尚未创建。但是,Feature1的内容已被推送到远程。我的问题基本上是...如何将A和B提交移动到名为Feature2的新分支?
注意:C,D,E和F不依赖A和B。A和B更改的文件与分支中其他提交的文件完全不同。
答案 0 :(得分:1)
假设A和B不是最新提交,则您具有:
m--m (master)
\
a--b--c--d--e--f (feature1)
由于feature1已被推送,因此对其重新设置基础以重写其历史记录将很有风险。
然后您可以revert a--b以便Feature1 不显示那些更改:
git checkout feature1
git revert a^..b
m--m (master)
\
a--b--c--d--e--f--g (feature1)
然后,您可以从Feature1创建一个Feature2分支,并在其上cherry-pick a--b:
git checkout -b feature2
git cherry-pick a^..b
m--m (master)
\
a--b--c--d--e--f--g (feature1)
\
a'--b' (feature2)