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

问题描述 投票:1回答:1

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

我有一个分支,我们称之为Feature1分支。 Feature1的父级是主分支,Feature1具有以下提交:

  • 一个
  • C
  • d
  • F

但是,A和B提交实际上并不属于该特定分支,并且应该真正位于不同的分支中,该分支将是Feature1分支的子代。让我们将A和B所属的假设分支称为Feature2分支。同样,这个分支必须脱离Feature1分支,而不是来自master分支。

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

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

git github version-control git-branch rebase
1个回答
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)
© www.soinside.com 2019 - 2024. All rights reserved.