如何删除Mercurial中文件的特定版本?
我需要在我的repo中删除一个版本化文件的特定版本,但我不知道怎么做 我可以使用hgcat--rev[version][file name]查看该文件,但我不知道如何删除它如何删除Mercurial中文件的特定版本?,mercurial,Mercurial,我需要在我的repo中删除一个版本化文件的特定版本,但我不知道怎么做 我可以使用hgcat--rev[version][file name]查看该文件,但我不知道如何删除它 有人知道如何删除特定的文件版本吗?简短回答:如果你的回购协议是公开的,那就很难了。如果是私人的,就容易些 详细回答:Mercurial是一个面向变更集的CVS,实际上并不存储文件修订。相反,它存储修订之间的更改(差异) 除此之外,每个变更集id都根据修订的内容计算为加密哈希。这意味着,如果您更改了单个变更集,那么它的每个后
有人知道如何删除特定的文件版本吗?简短回答:如果你的回购协议是公开的,那就很难了。如果是私人的,就容易些
详细回答:Mercurial是一个面向变更集的CVS,实际上并不存储文件修订。相反,它存储修订之间的更改(差异) 除此之外,每个变更集id都根据修订的内容计算为加密哈希。这意味着,如果您更改了单个变更集,那么它的每个后代变更集都将被更改。这是用Mercurial改写历史的代价 私人回购 如果您需要更改的变更集没有被推送到任何地方(或者回购协议本身是私有的),那么您可以随意更改历史记录
- 如果变更集是很久以前提交的,那么您可能会更新到其父变更集,即有问题的变更集(您可能必须保留一个虚拟变更集才能使其工作),将其导入MQ,修改它,然后
其上的其他祖先rebase--detach
-- 1 -- 2 -- A -- B -- C -- D original A and its descendants
\
A' -- B' -- C' -- D' modified A' and its descendants
即使在您将
A
–D
替换为A'
–D'
之后,从您的回购中提取的每个人仍将拥有A
–D
!你必须想办法让他们剥夺这个血统。“然后把其余的祖先移植到它上面。”-你是说重新给后代定基,对吗?这也应该保留后代之间的合并……还有一种称为“过时标记”的机制正在研究中,通过这种机制,你将能够传播a-D的剥离。@LaurensHolst:纠正我,我错了。在A'
之上重新设置B
的基址将创建一个新的变更集B'
,它有两个父项:A'
和A
。Rebase只是一个快进合并。@LaurensHolst:原来我从来没有注意到这个选项。它的神秘帮助文本也没有帮助。谢谢你的提醒!我已经更新了我的帖子。另外,我认为您可以在移植的变更集上使用新的commit--amend
,而不是MQ。