清除历史的安全方式 - Mercurial

时间:2015-04-09 20:28:15

标签: mercurial

我将项目克隆到我的本地目录并进行了很多更改。我目前的目标是将我更改的代码推送到远程存储库中的新分支。最终这个新分支将合并为默认值。

我的问题是,由于过去几周试图恢复一些丢失文件的一些愚蠢的努力,我最终得到了一些我不想公开展示的分支名称。

以下是我所拥有的:

$hg branches  
dev-v02  197:xxxxx  
dev2     194:xxxxx  
dev      183:xxxxx  
qa       189:xxxxx

$hg branch  
dev-v02

我的问题是,如果我通过" hg push --new-branch"将我当前的分支dev-v02推送到远程存储库,并且此分支稍后将合并回默认值,那么不需要的分支出现在违约的历史?如果是这样,有没有一种安全的方法来清除它们? 我不想丢弃我的更改。我只是不希望不需要的分支出现在" hg branches"或者" hg他的"以后的任何人从远程存储库克隆项目的命令。我在网上搜索了一下" hg strip"但我不能从文章中说出它是否也会删除我所做的改变。感谢。

编辑:我刚刚通过" hg clone -r 197 original-dir dest-dir"克隆了我的本地存储库。正如kevin和chessbot所建议的,现在hg分支显示:
dev-02 192:xxxxx
qa 187:xxxxx(无效)
我想" qa"仍然是因为我把它作为QA分支推到遥控器并稍后关闭它,我只需要忍受它。我将从现在开始从这个新目录推送。谢谢你的帮助。

3 个答案:

答案 0 :(得分:2)

尝试hg push --new-branch -b dev-v02指定您只推送该分支。

(参见:https://www.mercurial-scm.org/repo/hg/help/push

您可以做的另一件事:在您的计算机上本地克隆存储库,删除您不想要的分支,然后将该克隆推送到服务器。然后,您可以在本地保留您的历史记录,而无需将其推送给其他人。

答案 1 :(得分:2)

取决于。

分支与提交永久关联。分支是提交的一部分,并且对哈希做出贡献。在过去更改提交的分支将改变从该点开始的所有提交哈希。这与Git完全不同,Git只是一个指向HEAD的短暂指针。这些指针在Mercurial中实现为书签。

如果不需要的分支出现在您想要发布的提交(提交)的提交上,那么除了使用全新哈希重新创建历史记录之外,您几乎无法做到。这可以(例如)使用hg exporthg import以及本地克隆和(可能)一定量的shell脚本来完成。更高效的是,您可以使用the convert extension来自动化该过程。由于这会更改提交哈希值,因此如果已公开分发任何提交,则可能会导致严重问题。

如果您没有兴趣共享违规提交,则无法发布它们。这可以通过选择性推动来完成。但是,由于每次推送时都必须手动排除这些提交,因此克隆和剥离(或选择性地使用-r标志进行克隆)可能更安全。然后,你可以从你的部分克隆推出而不受惩罚。假设你有一个最新版本的Mercurial,你也可以强制提交秘密phase,这样它们就不会被推送:

hg phase -fs revisions

答案 2 :(得分:0)

您不想使用hg strip,因为它会永久删除历史记录中的提交(请参阅Mercurial wiki中的Editing History

如果我是你,我会关闭树枝:

hg up -C badbranch
hg commit --close-branch -m 'close badbranch, this approach never worked'
hg up -C default

(Mercurial wiki中的来源:Pruning branches

关闭分支后,hg branches不再显示它。

如果您执行想要查看已关闭的分支,请使用-c参数:

hg branches -c

<强>缺点:

hg his仍显示已关闭的分支。

您可以使用-b参数,仅显示默认分支:

hg his -b default