考虑到TortoiseHG中有3个分支的项目(">default"、">Phase1"one_answers">>Phase2//strong>"(,是否可以对一个分支进行更改,并使其反映在其他分支中的一个或两个分支中,而不合并它们?
这个想法是纠正一个分支中的错误,而不必"更新"到其他每个分支来纠正那里的相同错误。
如果是,是如何做到的?是同步吗?推还有别的吗?
有人能告诉我实现这一目标的步骤是什么吗(假设可行(?
谢谢Setnara
是的,这是可能的,我至少看到了两个明显的和一个很好的解决方案,但
以后不要使用明显的,尽快解决无脑工作流程!以后从CODE-MONKEYS处理这样的项目简直是噩梦
回扣样式
- 从错误修复的第一个变更集开始,将变更集(
hg help rebase
(重新绑定到新的目标(分支负责人(hg rebase -s $BUGFIX_START -d Phase 1
+hg rebase -s $BUGFIX_START -d Phase 2
(假设错误修复是默认分支的一部分(,将重新绑定的变更集保留在原始分支hg rebase ... --keep
中 - 解决可能的冲突
- 因为rebase将对$BUGFIX_START的所有子代进行rebase,其中可能有一些变更集与错误修复无关,所以
hg strip
不会对来自rebase目标的变更集进行错误修复
嫁接风格
- Graft(
hg help graft
(允许将单个变更集从树的一个部分注入到另一个部分(与rebase相反,rebase从自定义节点或merge注入子树,后者从最伟大的公共祖先注入所有历史(。您必须:- 更新到目标分支(
hg up Phase 1
(,读取hg help update
- 选择所有需要的变更集并在rebase中枚举(请参阅命令的
-r
选项(hg graft -r $BUGFIX_START -r $BUGFIX2 ... -r $BUGFIXN -D -U --log
- 使用阶段2分支执行前两个步骤
- 更新到目标分支(
最后
"正确的方式"(tm(-命名分支
- 从$BUGFIX_START
hg up $BUGFIX_START
的点或父级创建命名分支+更改一些东西+hg branch SEMANTICNAMEOFBUGFIX``hg ci -m "Branch for $BUGFIX"
- 将与错误修复相关的变更集重新绑定(如果需要,在剥离后使用,在不使用
--keep
的情况下使用(到这个新命名的分支中 - 将SEMANTICNAMEOFBUGFIX合并为默认,阶段1,阶段2
- 以后总是使用"每个任务分支",停止代码和存储库历史中的胡言乱语
我向你的导师表达了一种轻蔑:在授权公开提交之前,他必须告诉并解释这一点(本地个人存储库在任何程度上都可能是一场噩梦(
我强烈建议不仅阅读代码,还阅读明智和经验丰富的用户的文档、建议和提示,以免不断地重新发明
这本身是不可能的。由于可能存在潜在的冲突,合并始终是一个一步到位的过程。它们需要单独处理,一次处理一个。
当然,如果更新很痛苦,那么每个分支上可能已经更新了多个克隆。这样你就可以通过它们来合并新的修复分支。。。
然而,这是一个典型的问题,您的发布过程可以帮助解决。例如,如果default
是您的源分支,而Phase1
和Phase2
最终将在default
中合并回来,为什么不在所有其他分支中频繁合并default
呢?在开发分支中经常发布合并default
的策略,这将有助于尽早解决冲突,并且在default
中合并后,他们将从偶尔的错误修复中受益。
如果default
不是您的源分支,请创建一个只能容纳修复程序的新分支,并经常将该分支合并到阶段分支中,但您已了解要点。