将分支向后重新分支到主分支?

问题描述 投票:2回答:3

我有一个功能分支B,它是由一个功能分支A组成的。我想将分支B重新绑定到master上,而不需要分支A的提交。

我的存储库看起来像这样:

c1---c2---c3  master
            \
             c4---c5---c6  A
                        \
                        c7---c8---c9  B

我想要的是这个:

             c7---c8---c9 B
            /
c1---c2---c3  master
            \
             c4---c5---c6  A

我尝试从分支B到主人做一个rebase。这没有做任何事情,并将分支B保留在分支A.

git branch git-rebase
3个回答
5
投票

有可能追溯从Bmaster,所以就Git而言,分支B已经“开启”master。换句话说,B“包含”master

尝试明确要重新分支的分支和上游:

git rebase --onto master A B

4
投票

一个3行樱桃挑选解决方案,比克里斯的优秀答案简洁,但可能更清楚一些,可以这样:

git branch backup-B B
git checkout -B B master
git cherry-pick A..backup-B

步骤说明:

1)备份(也作为后来樱桃选择的参考)

git branch backup-B B

c1---c2---c3  <<< master
            \
             c4---c5---c6  <<< A
                        \
                        c7---c8---c9  <<< backup-B, B <<< HEAD

2)主人的B点(并在同一时间检查出来)

git checkout -B B master

c1---c2---c3  <<< master, B <<< HEAD
            \
             c4---c5---c6  <<< A
                        \
                        c7---c8---c9  <<< backup-B

3)“复制”丢失的提交(不能从A到达,但可以从“旧”B,这里c7c8c9

git cherry-pick A..backup-B

             c7'---c8'---c9'  <<< B <<< HEAD
            /
c1---c2---c3  <<< master
            \
             c4---c5---c6  <<< A
                        \
                        c7---c8---c9  <<< backup-B

(当然在这一点上,尽管没有必要,你可以用git branch -D backup-B删除备份以获得你要求的确切结果。但是,这样的救生衣对gititanic来说是轻负担;-)


2
投票

除了提供的解决方案,这里还有第三个。

您可以运行交互式rebase。当在B检查时,运行git rebase --interactive master。您的$EDITOR将打开以下内容:

pick c4 Message of c4
pick c5 Message of c5
pick c6 Message of c6
pick c7 Message of c7
pick c8 Message of c8
pick c9 Message of c9

在这里,您需要删除属于A的提交,因此您需要使文件看起来像:

pick c7 Message of c7
pick c8 Message of c8
pick c9 Message of c9

然后,保存并退出,瞧。

© www.soinside.com 2019 - 2024. All rights reserved.