[我将我的问题标记为 mercurial,但实际上,我问的是一个适用于其他源代码控制应用程序的概念性问题。]假设您有一个文件夹,其中包含受版本控制的应用程序源代码;称之为主干线。我克隆存储库并开始修改代码,处理程序的新版本,一次又一次地提交修订,这些修订永远不会成为主干的一部分。
然后有一天,在修订 23 的工作中,我发现了一个错误。
我提交它,作为修订版 24。
我希望你修复我的错误,而不需要我所做的所有其他更改。将修订版 24 的代码(错误修复)推送或合并回主干的一般程序是什么?
[我将我的问题标记为 mercurial,但实际上,我问的是一个适用于其他源代码控制应用程序的概念性问题。]假设您有一个文件夹,其中包含受版本控制的应用程序源代码;称之为主干线。我克隆存储库并开始修改代码,处理程序的新版本,一次又一次地提交修订,这些修订永远不会成为主干的一部分。
然后有一天,在修订 23 的工作中,我发现了一个错误。
我提交它,作为修订版 24。
我希望你修复我的错误,而不需要我所做的所有其他更改。将修订版 24 的代码(错误修复)推送或合并回主干的一般程序是什么?
在 Mercurial 中,您有多种选择(我确信其他 DVCS 具有类似的功能)
最简单的方法:一旦你意识到 bug 属于主干线,你更新到主线提示,提交,推送,然后将该 changeset 合并到你的侧项目中。
hg up -r mainline
# make your changes
hg com -m "I fixed the bug"
hg push -r mainline ## now others can pull it!
hg up -r sideproject
hg merge mainline
hg com -m "merge mainline bugfix into sideproject"
完毕。
有一些方法,通过使用 mq 扩展或导出补丁,可以让您编辑历史以实现类似的结果,但它们都只是在事后尝试完成上述方法。
变更集伴随着其祖先的所有变化。因此,您需要在拓扑上将主线更改(修订版 24)与您的副项目(修订版 23)分开。