Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何删除Mercurial中文件的特定版本?_Mercurial - Fatal编程技术网

如何删除Mercurial中文件的特定版本?

如何删除Mercurial中文件的特定版本?,mercurial,Mercurial,我需要在我的repo中删除一个版本化文件的特定版本,但我不知道怎么做 我可以使用hgcat--rev[version][file name]查看该文件,但我不知道如何删除它 有人知道如何删除特定的文件版本吗?简短回答:如果你的回购协议是公开的,那就很难了。如果是私人的,就容易些 详细回答:Mercurial是一个面向变更集的CVS,实际上并不存储文件修订。相反,它存储修订之间的更改(差异) 除此之外,每个变更集id都根据修订的内容计算为加密哈希。这意味着,如果您更改了单个变更集,那么它的每个后

我需要在我的repo中删除一个版本化文件的特定版本,但我不知道怎么做

我可以使用hgcat--rev[version][file name]查看该文件,但我不知道如何删除它


有人知道如何删除特定的文件版本吗?

简短回答:如果你的回购协议是公开的,那就很难了。如果是私人的,就容易些


详细回答:Mercurial是一个面向变更集的CVS,实际上并不存储文件修订。相反,它存储修订之间的更改(差异)

除此之外,每个变更集id都根据修订的内容计算为加密哈希。这意味着,如果您更改了单个变更集,那么它的每个后代变更集都将被更改。这是用Mercurial改写历史的代价

私人回购 如果您需要更改的变更集没有被推送到任何地方(或者回购协议本身是私有的),那么您可以随意更改历史记录

    >P>如果变更集是最近的一个,考虑使用:您可以将变更集导入队列中,转到所讨论的变更集,撤消对一个特定文件的更改,然后重新应用队列的其余部分。

  • 如果变更集是很久以前提交的,那么您可能会更新到其父变更集,即有问题的变更集(您可能必须保留一个虚拟变更集才能使其工作),将其导入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。