假设我是开发团队的一员,我们都在同一个项目的不同分支上工作:
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。
答案 0 :(得分:4)
你可以做David所说的,但是你可以使用cherry-pick
命令代替合并。
使用cherry-pick
的另一个选项是只选择您在分支上对其他分支所做的更改。
在这样做之前,您必须确保提交的更改属于并且仅针对错误修复。
然后,您只需转到其他每个分支git cherry-pick <commit hash>
,如果有任何冲突,您将需要解决它。
这是正确的做法,我想,我这样做,看起来更有风格。
答案 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中。这样,您只需在一次提交中修复错误一次。