mercurial推动某些修订

时间:2010-11-15 03:42:20

标签: mercurial

我在这里搜索过,但没有发现任何与此相关的问题。我在mercurial遇到了这样的问题: 我在bitbucket中管理开源项目,所以我在我的本地克隆了源代码。但我也将该项目用于我自己的实时网站,因此我制作了2个bitbucket repo克隆

Bitbucket Repo
|
==local_clone1
|
==local_clone2-> commit1            => commit2    => commit3
                (personalization)     (bug fix)     (add feature)

问题是,我想将commit2和commit3推回到local_clone1,所以稍后我可以推送到Bitbucket repo。但是不要推送commit1,因为它有我的个人数据。

想知道我们如何在mercurial中做到这一点?

2 个答案:

答案 0 :(得分:5)

在这种情况下,这可以毫无困难地完成。有关详细信息,请参阅Mercurial指南中的Removing history

以下是您需要做的基本知识:

  • 转到local_clone2
  • 从当前号码获取修订号(hg tip将显示您)。我们称之为731。
  • hg export 730-731 > ../local_clone1/changes.diff(或您喜欢的任何地方)
  • 转到local_clone1
  • hg import changes.diff

您可能需要手动编辑内容;有关该案例的更多信息,请参阅该指南。

答案 1 :(得分:1)

以下是几个选项:

退出

鉴于历史构造如下:

hg init db
cd db
echo >file1
hg ci -Am clone              # rev 0
echo >file2
hg ci -Am personalization    # rev 1
echo >file3
hg ci -Am bugfix             # rev 2
echo >file4
hg ci -Am feature            # rev 3 <tip>

然后,如果当前工作目录是提示,则以下命令将“撤消”个性化修订:

hg backout 1
hg ci -m backout

优点是历史仍然是不可变的,但显示了个性化变更集的添加和撤销。

Mercurial Queues

使用mq扩展名,可以编辑历史记录以删除更改集:

hg qimport -r 1:3  # convert changesets 1-3 to patches
hg qpop -a         # remove all patches (can't delete an applied patch)
hg qdel 1.diff     # delete rev 1's patch
hg qpush -a        # reapply remaining patches
hg qfin -a         # convert all applied patches back to changesets.

优点是个性化变更集消失了。缺点是变更集哈希值由于历史记录编辑而发生变化,因此永远不应该对已经推送给其他人的变更集进行更改。编辑历史记录也存在错误的风险。