git 对已推送到远程的功能分支进行变基

git rebase on a feature branch already pushed to remote

假设我在本地有功能分支,FB。 CC 说,FB 在提交时与 master 发生了分歧。 FB还有几个commit,比如说FBC1,FBC2.FB被push到远程仓库,然后合并到master。所以远程主机有 FBC1、FBC2,然后在前后提交了一些。

现在,如果我将远程提交拉到我的本地,那么我的本地主机现在有 CC-MC1-MC2-FBC1-FBC2-MC3-MC4,而 FB 有 CC-FBC1-FBC2。所以 master 和 FB 都有提交 FBC1,FBC2.

现在如果我在 FB 上 rebase master,那会是什么行为?

我认为它不会做任何事情,因为当您尝试对分支进行变基时,git 将尝试找到所涉及的分支之间的最后一个共同祖先...并且此时修订是FB 的小费,所以 git 看到没有什么可以变基的。

tl;dr: 它将执行 rebase 所做的事情,即重播源分支中但不在目标分支中的所有(非合并)提交,在目标分支的顶部。

首先让我们考虑与您的问题相反的问题:如果我们将 FB 变基到 master 会怎样? FB 中的每个提交都已经在 master 中,因此它将在 master 之上放置 0 个提交。结果是 FB 将被重置为看起来完全像 master.

现在回答你的问题,如果我们将 master 变基到 FB,每个在 master 但不在 FB 的(非合并)提交,将在 FB 之后重播。您的示例仅显示合并提交,但大概是分支 FB 的合并提交之前和之后的那些合并提交带来了其他一些合并提交?在这种情况下,所有这些提交都将在没有相应的合并提交的情况下重播,并且在提交 FB2 之后图形将被修改为线性。 (假设没有冲突并且 rebase 成功。)

要查看哪些提交将在 master 上重播并随后“重新排列”,您可以 运行 此命令:

git log FB..master --no-merges

显示 master 中不在 FB 中的所有提交减去合并提交。