我是Git的新手,想要一些帮助。这个问题与Move the most recent commit(s) to a new branch with Git类似,但该问题询问了最近的提交。这不是我需要的。让我进一步解释......
我有一个分支,我们称之为Feature1分支。 Feature1的父级是主分支,Feature1具有以下提交:
但是,A和B提交实际上并不属于该特定分支,并且应该真正位于不同的分支中,该分支将是Feature1分支的子代。让我们将A和B所属的假设分支称为Feature2分支。同样,这个分支必须脱离Feature1分支,而不是来自master分支。
此Feature2分支尚未创建。但是,Feature1的内容已被推送到远程。我的问题基本上是......如何将A和B提交到名为Feature2的新分支?
注意:C,D,E和F不依赖于A和B.A和B更改完全不同的文件,而不是分支中的其他提交。
假设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)