Mercurial仓库图疑难咨询:mq变更集与时间戳问题
解析Mercurial仓库提交图的两个疑问
问题A:mq相关变更集
提交图如下:
o changeset: 93:b0aa6f2898b6 | parent: 91:88cca7c8f32e | user: test <test@gmail.com> | date: Tue Feb 19 13:36:00 2019 +0100 | summary: some message | | o changeset: 92:0aff2e92ec57 |/ user: test <test@gmail.com> | date: Tue Feb 12 18:10:10 2019 +0100 | summary: [mq]: 2019-02-12_18-10-04_r91+.diff | o changeset: 91:88cca7c8f32e | user: test <test@gmail.com> | date: Tue Feb 12 18:09:49 2019 +0100 | summary: some message |
疑问1:变更集92的含义是什么?是否可类比Git中的回退提交?
变更集92是Mercurial Queues(mq)生成的补丁变更集,它不是回退提交。mq是管理临时补丁的工具,这个变更集对应一个应用在91上的补丁文件(即摘要里的.diff文件)。后续用户放弃了这个补丁,转而基于91直接提交了93,导致92成为一个孤立的、未被主线合并的mq补丁变更集,和Git里的回退操作(比如revert或reset)完全不是同一概念。
疑问2:此场景下的“mq”指代什么?
这里的mq是Mercurial Queues的缩写,是Mercurial的扩展工具,用于管理一系列补丁。它允许开发者将变更拆分为多个独立补丁,随时应用、移除或修改这些补丁,常用于需要反复调整的特性开发或补丁维护场景。这个变更集由mq工具自动生成,用于记录补丁内容和应用状态。
问题B:与父提交不匹配的时间戳
提交图如下:
o changeset: 62:143401518e68 | parent: 60:327ffdb4b8c3 | user: test <test@gmail.com> | date: Fri Nov 16 21:19:00 2018 +0100 | summary: some message | | o changeset: 61:b4a37ff37688 |/ user: test <test@gmail.com> | date: Fri Nov 16 16:00:00 2018 +0100 | summary: some message | o changeset: 60:327ffdb4b8c3 | user: test <test@gmail.com> | date: Fri Nov 16 18:10:00 2018 +0100 | summary: some message |
疑问3:如何解读变更集61的时间戳?其时间戳是否应介于60和62之间?
变更集的时间戳是提交创建时的本地时间,并非仓库内的“顺序时间”。这个场景中61的时间早于父提交60的时间是完全合理的:
- 开发者可能先基于旧版本(60的祖先)在本地创建了61的变更,之后才提交了60;
- 或者通过
hg commit --date手动指定了提交时间戳。
因此时间戳不需要严格介于父提交和后续提交之间,它仅反映该变更在本地被创建的时间,与仓库的提交顺序没有强制绑定关系。
内容的提问来源于stack exchange,提问作者Wackamie
相关产品推荐
相关产品推荐

