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
- git结帐target_branch
- git rebase --onto HEAD Cx source_branch
请注意,提交 Cx
将 不会 被选取 - 只有提交 Cy
和 Cz
将被选取并应用于提交 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
我怎样才能做一个 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
- git结帐target_branch
- git rebase --onto HEAD Cx source_branch
请注意,提交 Cx
将 不会 被选取 - 只有提交 Cy
和 Cz
将被选取并应用于提交 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