将分支向后还原为主分支?

Sla*_*ion 2 git branch git-rebase

我有一个由功能分支A组成的功能分支B。我想将分支B重新设置回主服务器,而无需分支A的提交。

我的存储库如下所示:

c1---c2---c3  master
            \
             c4---c5---c6  A
                        \
                        c7---c8---c9  B
Run Code Online (Sandbox Code Playgroud)

我想要的是:

             c7---c8---c9 B
            /
c1---c2---c3  master
            \
             c4---c5---c6  A
Run Code Online (Sandbox Code Playgroud)

我尝试从分支B迁移到主服务器。那什么也没做,将分支B保留在分支A上。

Chr*_*ris 5

它可以追踪从后Bmaster,所以就Git是有关部门B已经是“上” master。换句话说,B“包含” master

尝试明确说明要重新建立基础的分支以及上游:

git rebase --onto master A B
Run Code Online (Sandbox Code Playgroud)


Rom*_*eri 5

一个 3 行精选解决方案,不如 Chris 的出色答案简洁,但对某些人来说可能更清晰,可以这样:

git branch backup-B B
git checkout -B B master
git cherry-pick A..backup-B
Run Code Online (Sandbox Code Playgroud)

步骤说明:

1)做好备份(也为后面的cherry pick做参考)

git branch backup-B B
Run Code Online (Sandbox Code Playgroud)
c1---c2---c3  <<< master
            \
             c4---c5---c6  <<< A
                        \
                        c7---c8---c9  <<< backup-B, B <<< HEAD
Run Code Online (Sandbox Code Playgroud)

2)master处的B点(同时查看)

git checkout -B B master
Run Code Online (Sandbox Code Playgroud)
c1---c2---c3  <<< master, B <<< HEAD
            \
             c4---c5---c6  <<< A
                        \
                        c7---c8---c9  <<< backup-B
Run Code Online (Sandbox Code Playgroud)

3)“复制”缺少的提交(无法从 A 访问,但可以从“旧”B 访问,此处c7, c8, c9

git cherry-pick A..backup-B
Run Code Online (Sandbox Code Playgroud)
             c7'---c8'---c9'  <<< B <<< HEAD
            /
c1---c2---c3  <<< master
            \
             c4---c5---c6  <<< A
                        \
                        c7---c8---c9  <<< backup-B
Run Code Online (Sandbox Code Playgroud)

(当然,此时,尽管没有必要,您也可以删除备份来git branch -D backup-B获得您想要的确切结果。但是,这样的救生衣对 gititanic 来说是一个轻的负担;-)