当每个人都变基时,在共享分支上变基

Rebasing on a shared branch when everyone rebases

我在网上读到 rebase 命令不应该在 public 分支上 运行。我有以下情况:

master 已提交 A1 <- A2 <- A3
stable 在 A1 从 master 分支,提交 B1
dev1 在 B1 从 stable 分支并提交 C1 <- C2 <- C3
dev2 在 C2 从 dev1 分支并提交 D1 <- D2

现在,如果我想用 master 的更新来更新 stable,我会 运行 git rebase master 并强制推送。现在,dev1stable 的基础上做了一个 rebase 以获得 master 的更新,而 dev2 需要 masterdev1 做一个在 dev1 的基础上变基。

在这种情况下,只要我遵守命令,运行 stabledev1dev2 分支上的 rebase 命令是否可以?如果这不行,那么将最新的 master 合并到 stable 并将最新的 masterdev1 更新合并到 dev2 的替代方法是什么?我唯一能想到的就是创建一个拉取请求,merge 代码,然后重新分支。这是更好的选择还是我遗漏了什么?

With Git 2.18+,你不需要做所有这些变基:只有一个:

git checkout stable
git rebase --rebase-merges master

dev1dev2 也应该变基:您需要将本地分支重置为那些新的变基分支 HEAD。

在你的例子中,如果你为 masterstabledev1dev2 设置了本地分支,这意味着只有一个变基(stable) 将变基所有相关分支(dev1dev2

--x--x--x--x (master)
      \
       s--s--s (stable)
              \
               d--d (dev1)
                   \
                    d--d (dev2)

A git checkout stable; git rebase --rebase-merges master 可以:

--x--x--x--x (master)
            \
             s'--s'--s' (stable)
                      \
                       d'--d' (dev1)
                            \
                             d'--d' (dev2)

无需变基 stable,然后 dev1,然后 dev2