git - 如何防止 git 在对已 merge 然后恢复的分支进行 rebase 时进行快进

标签 git

我有一个名为 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/

相关文章:

git - 为什么我可以 rebase 但我不能在 git 中 merge ?

Git 允许我在不提交更改的情况下切换分支

git - 从 2 个文件夹的差异创建补丁文件

ruby-on-rails - 捆绑安装未从我的更新后 Hook 运行

eclipse - 无法在 Eclipse 中获取远程存储库引用

javascript - 如何在本地运行node.js应用程序进行开发

git - 如何撤消推送的提交,让它就像从未发生过一样?

git - 如何在初始提交后停止跟踪 web.config 文件的更改

git - 如何让 'git diff' 只显示提交消息

git merge-file 因使用 git show 的 bash 进程替换运算符而失败