如何在多个分支上应用错误修复?

时间:2015-06-24 15:16:09

标签: git

假设我是开发团队的一员,我们都在同一个项目的不同分支上工作:

     o--o--o--o (Bob)
    /
o--o---o---o---o---o--o (Me, master)
        \
         o--o--o---o (Alice)

今天,我在Alice和Bob的公共文件中发现了一个错误。这是一个老虫子。

如何在其他分支中修复它?这种情况下的工作流程是什么?

我认为正确的方法是生成一个我亲自发邮件给Alice和Bob的补丁:"嗨,Alice和Bob,我发现提交7a6b87f上有一个错误。请找到此电子邮件附带的补丁"。

如果只有三个人参与该项目,解决方案似乎非常简单。如何在拥有更多分支机构和更多开发人员的更大项目上进行管理?

当然,如果我独自参与该项目,我可以简单地使用这个solution

4 个答案:

答案 0 :(得分:4)

你可以做David所说的,但是你可以使用cherry-pick命令代替合并。 使用cherry-pick的另一个选项是只选择您在分支上对其他分支所做的更改。 在这样做之前,您必须确保提交的更改属于并且仅针对错误修复。 然后,您只需转到其他每个分支git cherry-pick <commit hash>,如果有任何冲突,您将需要解决它。 这是正确的做法,我想,我这样做,看起来更有风格。

此处的文档为:http://git-scm.com/docs/git-cherry-pick

答案 1 :(得分:2)

您可以使用以下方法轻松地bash脚本

for branch in branch1 branch2 branch3; do git checkout $branch && git cherry-pick a970d6ecd; done;

那时我也喜欢通用祖先解决方案:

 for branch in branch1 branch2 branch3; do git checkout $branch && git merge common-ancestor-branch; done;

答案 2 :(得分:1)

邮件解决方案在git实现git和ssh协议交换方法之前使用,可用于向未连接到Internet的存储库发送人员补丁。从邮件中应用补丁的最简单方法是将它们写入mbox文件并使用git am。但是由于大多数人甚至不知道mbox文件是什么,所以这种方法并不经常使用。

检查git help merge-base以找到分支以进行修正提交的位置。

如果您真的想要在单个提交中修复,您可以在任何地方编写该提交,如果您对这些分支具有写访问权,则可以为所有分支cherry-pick

在大型团队中,每个开发人员定义一个共同基础,定期合并是非常严重的。

答案 3 :(得分:0)

我会创建一个Alice和Bob的共同祖先的分支,修复那里的bug,然后将该分支合并到Alice,Bob和master中。这样,您只需在一次提交中修复错误一次。