如何在HG中推送最近的提交

时间:2014-03-12 11:52:22

标签: mercurial mercurial-queue

我做了一些本地提交。

但是我想推送最新的那些,如4977和4978 ,不包括之前的那些。

4948 local commit 1 is the ancestor of all commits

有人可以告诉我们在HG中如何做到这一点

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

2 个答案:

答案 0 :(得分:2)

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

实现这一目标的最简单方法可能是使用histedit extension。您需要通过使用以下

修改.hgrc(或mercurial.ini)来启用它
[extensions]
histedit = 

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

hg histedit 4948

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

请注意,除了防止它被推送到遥控器之外,这将从本地仓库中删除变更集!

答案 1 :(得分:1)

你不能推送提交,也不能推送所有的祖先提交。但是,你可以“折叠”/“崩溃”/“壁球”提交,以摆脱你不喜欢的祖先提交。您可以使用标准histedit extension

简单地运行

$ histedit 4948

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

将行开头的关键字更改为fold将告诉histedit将提交与先前的提交相结合。这样您就可以将历史记录更改为

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

并将您在local commit 2中所做的更改“折叠”为local commit 3