将较旧的提交移到新的单独分支(推到远程)

时间:2019-03-15 04:20:40

标签: git github version-control git-branch rebase

我是Git的新手,希望获得帮助。这个问题类似于Move the most recent commit(s) to a new branch with Git,但该问题询问最近的提交。这不是我所需要的。让我进一步解释...

我有一个分支,称之为Feature1分支。 Feature1的父级是master分支,Feature1包含以下提交:

  • A
  • B
  • C
  • D
  • E
  • F

但是,A和B提交实际上并不属于该特定分支,应该确实位于另一个分支中,而该分支将是Feature1分支的子级。让我们将这个假设分支A和B称为Feature2分支。同样,该分支必须从Feature1分支中退出,而不是从master分支中退出。

此Feature2分支尚未创建。但是,Feature1的内容已被推送到远程。我的问题基本上是...如何将A和B提交移动到名为Feature2的新分支?

注意:C,D,E和F不依赖A和B。A和B更改的文件与分支中其他提交的文件完全不同。

1 个答案:

答案 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)