我可以在Mercurial压缩提交吗?

R. *_*des 105 mercurial

我有一对应该只是一个提交.如果我使用git,我会使用:

git rebase -i <some-commit-before>
Run Code Online (Sandbox Code Playgroud)

然后压扁它们.

我可以用mercurial做到吗?如果是这样,怎么样?

Ry4*_*ase 89

是的,您可以使用mercurial执行此操作,而无需通过Concatenating Changesets进行任何扩展.

或者,如果您想使用扩展程序,您可以使用:

  • 只是试图压制2次提交.我真的需要一个包含10多个命令或替代扩展的维基页面吗? (11认同)
  • 一点注意事项:Histedit扩展与Mercurial 2.3及更高版本一起发布.你只需要启用它. (4认同)
  • 查看评论.Histedit现在是内置的,你只需要启用它(因为没有默认命令会修改历史记录) (3认同)

G. *_*cki 41

我最喜欢的是hg strip --keep命令.然后我在一次提交中提交所有更改.

对我来说这是最快,最舒适的方式,因为我喜欢在日常工作中做很多小事;)


注1:strip需要mq启用内置扩展.
注2:我最喜欢的Git/Mercurial客户端(SmartGit/Hg)在默认情况下追加--keep参数strip.更方便的是:它提供了以下选项join commits:]

  • hg strip的完整命令是:`hg strip --keep --rev [rev]`其中`rev`是你要用最后一个提交的第一个提交的修订版号 (4认同)
  • @NicolasForney不完全是,`--rev`是可选的,完整的命令是`hg strip --keep [rev]` (3认同)
  • 使用`hg strip`不是最好的主意.这不完全安全.尝试`hg histedit`,甚至尝试使用evolve扩展. (3认同)

Mar*_*cek 31

衍合延长工作就像一个魅力.要压缩2次提交:

$ hg rebase --dest .~2 --base . --collapse
Run Code Online (Sandbox Code Playgroud)

Dot是当前版本的快捷方式.

当你在一个分支上进行一些提交并希望将它们全部折叠成一个时,它会更容易:

$ hg rebase --dest {destination branch (e.g. master)} --base . --collapse
Run Code Online (Sandbox Code Playgroud)

这是如何工作的:

在此输入图像描述

(来自http://mercurial-scm.org/wiki/RebaseExtension#Collapsing)


Pul*_*yal 13

如果您正在阅读此答案,则可以忘记此答案中提到的所有其他选项,并使用evolve扩展中fold命令.

evolve是mercurial的延伸,它帮助我们拥有安全可变的历史,但它仍然是实验性的.您可以通过从其repo克隆它并将其添加到.hgrc中来使用它.

[extensions]
evolve = ~/evolve/hgext/evolve.py
Run Code Online (Sandbox Code Playgroud)

假设您在主目录中克隆了evolve repo.现在你很高兴.你也可以寻求帮助hg help fold.

折叠命令

你告诉fold要压缩/折叠一个没有破坏的线性提交链.折叠的作用是,它创建一个新的变更集,其中包含所有变更集的更改,并将所有这些变更标记为过时.您可以在docs上更深入地了解这一点.

现在假设您有以下历史记录.

a -> b -> c -> d -> e -> f -> g
Run Code Online (Sandbox Code Playgroud)

你想挤压e,fg.你可以做

hg up g
hg fold -r e
Run Code Online (Sandbox Code Playgroud)

结果将是

a -> b -> c -> d -> h
Run Code Online (Sandbox Code Playgroud)

h变量集在哪里包含来自所有三个提交的更改e,f以及g.

您也可以从历史中间折叠变更集,即不一定要选择包含尖端的链.假设你想折叠b,cd.你可以做

hg up d
hg fold -r b
hg evolve --all
Run Code Online (Sandbox Code Playgroud)

这将导致

a -> i -> j
Run Code Online (Sandbox Code Playgroud)

其中i是的折叠变更b,c,dj是相同的修改集h. 必须阅读Evolve用户指南.

  • @NeilG是的,mercurial社区正在努力尽快获得py3支持. (2认同)