0

假设我们有这个拓扑:

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 没有 b1 提交)

4

2 回答 2

3

不,那是不可能的。有些b1提交在b2's 的历史中,所以你必须重写历史来摆脱那些。

于 2012-05-18T12:38:14.457 回答
2

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

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

为了获得 I 提交,您需要所有提交对象 A、B、D、E、G、H、I。

因此,除非您从 B 中变基 G,否则您将无法排除 D、E 提交。

于 2012-05-18T14:58:31.517 回答