在Git中,如何将错误修复提交应用于其他较新的分支?

YYC*_*YYC 3 git

如果我有一个包含3个分支的公共Git存储库,如下所示:

  (release-to-customerA)
      |
      U               (master)
     /                    |
A---B---C---D---E ... S---T 
        |
    (release-to-customerB)
Run Code Online (Sandbox Code Playgroud)

其中提交'B'是原始发布版本,提交'U'解决了'B'中的一些错误.我想将提交'U'应用于masterrelease-to-customerB分支,以及下次我根据提交'D','E',...'T向客户提供新版本时',我想要提交'U'.最干净的方法是什么?

我知道git rebase或者git cherry-pick可以在我的本地存储库中执行该操作,但是当我将重新定位的工作提交到公共存储库时,我会搞砸历史记录吗?

谢谢你的回答.

Cas*_*bel 5

虽然采摘樱桃会起作用,但我不确定你为什么要这样做.它会创建重复的提交,如果您想要合并,可能会导致问题.实际上,这似乎是您要合并的情况!

  (bugfixB, releaseA)
        --------------------- Y (master)
       /                     /
      U---X (releaseB)      /
     /   /                 /
A---B---C---D---E ... S---T
Run Code Online (Sandbox Code Playgroud)

请注意,我添加了一个分支名称bugfixB - 这是一个非常一般的想法.提交U应该在一个分支上进行,其目的是修复B(可能是几个提交).然后应该将该分支合并到需要错误修复的所有分支中 - 在本例中为releaseA,releaseB和master.

 git checkout -b bugfixB <SHA1 of B>
 # fix things, add changes
 git commit

 # for each branch...
 git checkout releaseA
 git merge bugfixB
 git checkout releaseB
 git merge bugfixB
 git checkout master
 git merge bugfixB
Run Code Online (Sandbox Code Playgroud)