在Git中,如何将一个分支与其上游分支分离?

3

我有一个分支是基于另一个分支构建的,但实际上应该是从主分支分离出来的(它们是不同的特性)。目前我认为我的情况是:

...- master
        \  
         A1 - A2
               \
                B1

我想要的是A分支中的更改不出现在B分支中。最终结果应该是:

         B1
        /
...-master
         \   
          A1 - A2      

到目前为止,我已经尝试过在B分支上执行git branch --set-upstream-to=mastergit rebase master,但这并不是我想要的结果。


2
你需要一个交互式变基 git rebase -i。它将允许你选择要变基的提交。检出当前在 B1 上的分支并执行 git rebase -i master(然后只需选择 B1 进行变基)即可解决问题。 - toniedzwiedz
2个回答

3

这应该是一个rebase --onto命令:

git checkout B1
git rebase --onto master A2 B1

这看起来是我所要求的最简洁的方法。如果我在B分支上进行了更多的提交,我是否想在语句中使用最新的提交(比如B3),还是它标记了rebase开始的地方? - Michael Winterstein
所有在 A2 之后直到当前 HEAD(B1,或者经过多次提交后的 B3)的提交将被变基到主分支上。 - VonC

0

另一种方法可能是从主分支创建一个新的分支,并挑选在B1上完成的提交

git checkout master
git checkout -b B1 #(either delete beforehand B1 (git branch -D B1) or use a different name here)
git cherry-pick SHA-Commit-on-B1
...

由于 cherry-pick 支持一系列提交,可以参考 https://dev59.com/DHI-5IYBdhLWcg3wJE4K#3664543 进行尝试


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接