我可以将 "git rebase" 表示为一系列精选吗?

Can I represent a "git rebase" as a series of cherry-picks?

似乎"git rebase"有额外的回退逻辑来处理合并失败:

Falling back to patching base and 3-way merge...

它在那里做什么,我需要如何调用我的 cherry-picks 来获得相同的行为?

可能正确的解决方案是不要尝试将 rebase 表示为一系列精选,但如果可能的话会很好,因为我可以使用以下方法处理 rebase 和任意更改集合同样的流程。

大多数 git rebase 命令实际上 do 运行 git cherry-pick.

您看到的回退来自 git rebase 的一种形式,由于历史原因, 使用 git cherry-pick。当您调用 non-interactive git-rebase and 时使用这种形式,不要使用任何使其使用的选项new-and-improved rebase-invoking 方法。

旧形式通常产生相同的效果。它包括使用 git format-patch 将每个提交变成一个补丁,然后使用 git am --3way 应用所有格式化的补丁。 --3way 选项告诉 git am 如果补丁不能盲目应用,它应该在每个格式化补丁中使用 index 行来实现 git cherry-pick [=37] 的一部分=]会自动完成。

如果你想让rebase直接使用git cherry-pick,你可以:

  • 提供 -k 选项,或
  • 提供 -m 选项,或
  • 提供一个-s <em>策略</em>选项,或者
  • 提供一个 -X <em>extended-option</em> 选项,或者
  • 使用交互式变基(-i--interactive),或
  • 使用--autosquash选项,或者
  • 使用 -p 或 (Git 2.18+) -r 选项。