在没有变基础的情况下推动子分支

时间:2012-05-18 12:31:18

标签: git rebase

假设我们有这种拓扑结构:

X--X--X--             origin/master
    \     
     \     
      \--X--X--X--             b1 (private - not to be shared)
             \
              \
               \--X--X--X--    b2 (to be shared upstream)

我们只想分享b2而不是b1,所以我们可以这样做:

git rebase --onto origin/master b1 b2
git push origin b2

是否有可能在不使用rebase和更改本地历史记录的情况下实现相同的目标? (推b2 sans b1提交)

2 个答案:

答案 0 :(得分:3)

不,那是不可能的。一些b1提交在b2的历史记录中,因此您必须重写历史记录才能删除它们。

答案 1 :(得分:2)

有助于不考虑单个文件,而是考虑整个提交对象。要进入b2,您需要第二行的一些提交对象。

A--B--C--                  master
    \
     \--D--E--F--          b1
            \
             \--G--H--I--  b2

为了得到我的提交,你需要所有提交对象A,B,D,E,G,H,I。

因此,除非你从B改变G,否则你将无法排除D,E提交。