重播修改为在另一个分支上提交的更改

replay changes ammended to commit on another branch

我有:

1) 创建了 branch1

2) 在 branch1

本地提交 commitA1

3) 结帐到 branch2(已应用 commitA1

4) 现在,在 branch2 我做了一些其他的提交(commitB1commitB2 等),所以它看起来像:

----commitB2-----
----commitB1-----
----commitA1-----

5) 然后,我又回到了 branch1 因为我需要改变一些东西。我已将这些更改修改为 commit1A

6) 我意识到我在 branch2 上也需要那些最近的修改。

在这里,我的问题是:如何以最快的方式将这些更改应用到 branch2?我想保存现有层次结构,因此我希望将此更改应用于 branch2 上的 commitA1(因此在 commitB1commitB2 之前)。

我以为我可以cherry-pick,但它会产生合并冲突,解决后看起来像:

----commitA1-----
----commitB2-----
----commitB1-----
----commitA1-----

谢谢。

  1. checkout branch2git reset --hard HEAD^ 撤消 cherry-pick.
  2. git format-patch branch1^..branch1 --stdout > patch 制作应用修改后 commit1A.
  3. 的补丁
  4. git rebase -i HEAD~4,打开一个编辑器,内容如下:

    pick ed4dcf2 foo
    pick 6af0cca commitA1
    pick e9cfa08 commitB1
    pick d9856c4 commitB2
    (snip)
    
  5. 编辑如下内容:

    e ed4dcf2 foo
    d 6af0cca commitA1
    pick e9cfa08 commitB1
    pick d9856c4 commitB2
    

    这意味着将在提交 foo 后编辑并删除提交 A1

  6. 保存并关闭编辑器,这将启动变基。
  7. rebase 在 foo 之后停止。然后,通过 git apply patch 应用补丁,删除补丁文件,git add 更改,以及 git commit 它们(没有 --amend)。
  8. git rebase --continue 恢复 rebase,它应用 commitB1 和 commitB2。