我可以压缩提交Mercurial吗?
我有一对提交应该只是一个。 如果我使用git,我会使用:
git rebase -i <some-commit-before>
然后挤压它们。
我能做到这一点在mercurial? 如果是这样,怎么样?
是的,您可以使用mercurial来执行此操作,而无需通过连接更改集进行任何扩展。
或者,如果你想使用扩展,你可以使用:
- 崩溃扩展
- Rebase扩展或
- Histedit扩展
我最喜欢的是hg strip --keep
命令。 然后我在一个提交中提交所有更改。
这对我来说是最快最舒服的方式,因为在日常工作中我喜欢做很多小的提交;)
注1: strip
需要一个内置的扩展mq
来启用。
注2:默认情况下,我最喜欢的Git / Mercurial客户端(SmartGit / Hg)追加 – 在strip
过程中--keep
参数。 更方便的是:它提供了一个叫做join commits
选项:]
Rebase扩展工作就像一个魅力。 压缩2个提交:
$ hg rebase --dest .~2 --base . --collapse
点是当前修订的快捷方式。
当你在一个分支上进行一些提交并且想把它们全部合并成一个时,它会更容易:
$ hg rebase --dest {destination branch (eg master)} --base . --collapse
这是如何工作的:
(来自http://mercurial-scm.org/wiki/RebaseExtension#Collapsing )
如果你正在阅读这个答案,你可以忘记在这个答案中提到的所有其他选项,并使用evolve扩展中的
fold
命令。
evolve
是mercurial的延伸,这有助于我们有安全的可变历史,但它仍然是实验性的。 你可以使用它从它的repo克隆它,并像这样添加到你的.hgrc中。
[extensions] evolve = ~/evolve/hgext/evolve.py
假设你在主目录中克隆了进化回购。 现在你很好走。 你也可以通过hg help fold
寻找hg help fold
。
折叠命令
你告诉fold
来压扁/折叠一个没有被破坏的线性提交链。 什么是折叠,它会创build一个新的变更集,其中包含所有变更集的变更,并将所有这些提交内容标记为过时。 您可以在文档中对此有更深入的了解。
现在假设你有以下的历史。
a -> b -> c -> d -> e -> f -> g
你想挤压e
, f
和g
。 你可以做
hg up g hg fold -re
结果将是
a -> b -> c -> d -> h
其中h
是包含所有三个提交e
, f
和g
的变更的变更集。
您也可以从历史中间折叠变更集,即不一定必须select包含提示的链。 假设你想折叠b
, c
和d
。 你可以做
hg up d hg fold -rb hg evolve --all
这将导致
a -> i -> j
其中i
是b
, c
, d
和j
的折叠变化集,与h
相同。 进化的用户指南是必读的。