0

I have done some local commits.

But I want to push the most recent ones like 4977 and 4978 excluding the previous ones.

4948 local commit 1 is the ancestor of all commits

Can some one tell how do we do that in HG

4978 local commit 4
  |
  |
  |
4977 local commit 3
  |
  |
  |
4976 local commit 2
  |
  |
  |
4948  local commit 1
4

2 回答 2

2

Mercurial 存储库旨在具有不可变的历史记录,因此开箱即用是不可能的。但是,有一些解决方法。

实现这一点的最简单方法可能是使用histedit 扩展。您需要通过使用以下内容修改您的 .hgrc(或 mercurial.ini)来启用它

[extensions]
histedit = 

然后你可以从命令行运行 histedit 子命令并告诉它回顾你关心的变更集......

hg histedit 4948

这将弹出一个文本编辑器,pick每个变更集旁边都有单词。更改pickdrop您不再需要的变更集,保存并退出,问题变更集将消失。

请注意,这将从您的本地存储库中删除更改集,此外还可以防止将其推送到远程!

于 2014-03-12T13:25:40.963 回答
1

您不能在不推送所有祖先提交的情况下推送提交。但是,您可以将提交“折叠”/“折叠”/“壁球”放在一起以摆脱您不喜欢的祖先提交。为此,您使用标准的histedit 扩展

只需运行

$ histedit 4948

你会看到一个编辑器打开了。该编辑包含一个文件,该文件将用作 histedit 的说明。默认情况下,所有变更集都保持不变,但您可以更改行首的关键字来更改它。此外,您可以重新排序这些行以重新排序相应的提交。

将行首的关键字更改为fold将告诉 histedit 将提交与前一个提交结合起来。这样您就可以将历史记录更改为

4978 local commit 4
  |
  |
  |
4977 local commit 3
  |
  |
  |
4948  local commit 1

从而将您在您的更改中“折叠”local commit 2local commit 3.

于 2014-03-12T13:23:59.733 回答