Git rebase "branch segment"(需要像 --from 参数这样的东西?)

Git rebase "branch segment" (need something like a --from parameter?)

我怎样才能做一个 git 变基从而达到 "take commit FROM commit c1 to branch tip of branch X, and transplant them onto other branch A2" 的效果?

在视觉上,我需要做一个 rebase 来让我离开这棵树:

----------------...---*----------*----*---...---X
  |  \---...---A1     master     c1   c2
  \----...--A2

...给这个:

----------------...---*master
  |  \---...---A1
  \----...--A2---*----*---...---X'
                 c1'  c2'

我一开始以为 --fork-point 参数是我需要的,但尝试使用它的结果对我来说是 "pure WTF",我猜它做了一些完全不同的事情,所以我恢复到之前的状态这次失败的尝试(我所做的是:git checkout X; git rebase A2 --fork-point master ...也许使用 c2 的散列而不是 master 是正确的,但是上面的结果对我来说太不可理解了,所以我完全放弃了这条赛道。 ..)


(P.S。我不想被告知 "why this is a bad idea"。我知道我需要什么,我清楚地知道提交应该如何移动,我也有一个很好的了解文件之间发生的所有更改,因此我预计不会发生冲突,如果发生冲突,我相信我可以正确解决它。)

你试过了吗git rebase --onto

具体来说,如果您的目标是 cherry-pick source_branch 的提交超过 target_branch (即提交 Cy & Cz 而不是提交 C6)

           C6 o           => target_branch
              |
           C5 o  o Cz     => source_branch
              |  |
           C4 o  o Cy
              |  |
           C3 o  o Cx     => some_intermediate_branch
              |  |
           C2 o---
              |
           C1 o
  1. git结帐target_branch
  2. git rebase --onto HEAD Cx source_branch

请注意,提交 Cx 不会 被选取 - 只有提交 CyCz 将被选取并应用于提交 C6 之上。

1.git cherry-pick

git checkout A2
git cherry-pick C1^..X

2.git rebase --onto

git rebase --onto A2 C1^ X
tip=`git log -1 --pretty=%h`
git checkout A2
git reset $tip --hard