我有一个名为 feature 的分支,它在提交 F 处从 main 分支出来,有两个提交,A 和 B。
这与 merge 提交 M merge ,然后使用提交 R 恢复 merge 。
我现在想要对分支功能进行 rebase ,以便它位于 main 的顶端,并再次提交 A 和 B(这样我就可以继续处理它并修复导致需要恢复的问题)。
但是,当我这样做时git rebase main
,git 只是快进到 main 的顶端,大概是因为它看到 A 和 B 已经在 main 上了。
我该如何强制执行此操作?
我已经尝试过git rebase --onto main SHA_FOR_F --no-ff
但这做同样的事情。
情况如下:
R - main
|
M
|\
| B - feature
| |
| A
|/
F
|
我想要:
B - feature
|
A
|
R - main
|
M
|\
| B
| |
| A
|/
F
|
我知道我可以单独挑选 A 和 B,但是有没有办法一次性做到这一点?
最佳答案
(如果你只有 2 次提交,手动挑选显然是一个非常可行的选择)
您还可以将范围传递给gitcherry-pick
:
git cherry-pick F..B
这将跳过 git rebase
所做的“检测提交是否已经是目标分支的一部分”算法。
[编辑]
实际上,git rebase
还可以选择跳过此检查: --reapply-cherry-picks
(在 2020 年第 2 季度 v2.27 中添加)
git rebase --reapply-cherry-picks --onto master F B
优点是您还可以添加--interactive
,并自行编辑应该保留和不应该保留的内容。
关于git - 如何防止 git 在对已 merge 然后恢复的分支进行 rebase 时进行快进,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68016059/