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

时间:2016-11-04 10:06:10

标签: git branch

我有:

1)创建了branch1

2)在commitA1

上本地提交branch1

3)结帐到branch2commitA1已应用)

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

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

5)然后,我回到branch1因为我需要改变一些事情。我已将这些更改归功于commit1A

6)我意识到我还需要branch2上最近修改过的更改。

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

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

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

感谢。

1 个答案:

答案 0 :(得分:1)

  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之后编辑并删除co​​mmitA1

  6. 保存并关闭编辑器,启动rebase。
  7. 在foo之后,rebase停止了。然后,按git apply patch应用修补程序,删除修补程序文件,git add更改,git commit(不使用--amend)。
  8. git rebase --continue恢复rebase,它应用commitB1和commitB2。