在交互式变基时,将更改移动到其他提交

gzm*_*zm0 5 git git-rebase

在清理(即大部分压缩)某些更大功能的历史时,我经常遇到以下情况:

Commit A:
  - change A.1
  - change A.2
  - change A.3

// EDIT: maybe some more commits

Commit B:
  - change B.1
  - change B.2
  - change B.3
Run Code Online (Sandbox Code Playgroud)

假设现在我想转移change B.1使用交互式rebase提交A. 到目前为止我发现的唯一方法是:

  1. 开始 rebase -i
  2. 编辑提交B.
  3. 在tmp commit中提交B并提交B(reset HEAD^然后add -p)
  4. 开始 rebase -i
  5. 在提交A中修复tmp提交

这需要两个rebase并且非常麻烦.另外,我必须在拆分时重写提交B的提交消息.

有没有更好/更有效的方法来实现这一目标?

Mag*_*äck 2

可能不是一个显着的改进,但是

  1. git rebase -i A^
  2. git cherry-pick --no-commit B
  3. git add -p
  4. git commit --amend
  5. git reset --hard
  6. git rebase --continue

将是另一种选择。