为什么 git rebase --onto 不移动任何提交?

Why does git rebase --onto not move any commits?

我的设置如下所示:

- A - B - C - ... - D - E <- copy-of-master
   \ 
     F - ... - G - H <- dev
                \ 
                 I - J <- bugfix

我想将提交 I 和 J 移动到 copy-of-master,这只是 upstream1/master.

的副本

然而命令git rebase --onto copy-of-master dev bugfix根本没有做任何事情。当我打开拉取请求时,它说 bugfixupstream1/master 是相同的。

此外,在 运行 变基之后,当我 git checkout dev 它告诉我:

Your branch and 'upstream2/dev' have diverged, and have 1814 and 1799 different commits each, respectively

这只是表明 dev 以某种方式移动到指向 copy-of-master,因为 upstream1/masterupstream2/dev 大约相隔 2000 次提交。

I want to move commits I and J onto copy-of-master, which is just a copy of upstream1/master.

为什么不直接使用 git cherry-pick I J 呢?

git checkout copy-of-master
git cherry-pick I J

git cherry-pick <SHA-1> <SHA-1> <SHA-1> ...

Apply the change introduced by the commit at the tip of the master branch and create a new commit with this change.

您还可以为 cherry-pick 指定一个范围

git cherry-pick <SHA-1>...<SHA-1>

However the command git rebase --onto copy-of-master dev bugfix does nothing at all

这是预期的:

git 变基到 copy-of-master dev bugfix 会将所有提交移到 dev 之后,直到 bugfix.

并且在您的图表中,没有提交 after dev (H).

- A - B - C - ... - D - E <- copy-of-master
   \ 
     F - ... - G - H <- dev
                \ 
                 I - J <- bugfix

G(即 dev~1,在 dev 之前提交一次)但是会工作得很好:所有提交 after G 最多 bugfix 代表 bugfix 次提交。

git rebase --onto copy-of-master dev~1 bugfix

假设 dev~1(或 G)是 bugfix 分支从 dev 分支的提交。