从 mercurial 存储库中删除所有本地书签和提交

Remove all local bookmarks and commits from mercurial repository

我正在寻找剥离所有本地提交(即未在远程回购中提交)并从 mercurial 存储库中删除所有本地书签的最简单方法。我知道我可以 运行 类似 hg bo | xargs hg strip && hg bo | xargs hg bo -d 的东西(显然是剥离提交哈希值)但是当我堆叠提交时我在尝试这样的事情时遇到了麻烦。

是否有一种简单的方法(如果有点笨手笨脚,也许)可以消除对存储库副本的所有本地更改,而只留下一个完全反映远程存储库的方法?谢谢!

  1. 为了剥离子树,您可以手动剥离最老的祖先

The strip command removes the specified changesets and all their descendants.

  1. 为了获得未发布的变更集的根,您可以使用 revsets 和模板。如果你有一个远程仓库(使用 default 别名),它将只是
hg log -r "roots(outgoing())" -T "{node|short}\n"

对于许多遥控器,revset 可以修改为

roots(outgoing(PATH1) & outgoing(PATH2) ... & outgoing(PATHN))

或(有一些假设:a)Mercurial 支持阶段 b)未使用秘密阶段 c)远程回购是普通的 "publishing repo")

roots(draft())

(未推送的变更集默认处于草稿阶段)