我在这里搜索过,但没有发现任何与此相关的问题。我在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中做到这一点?
答案 0 :(得分:5)
在这种情况下,这可以毫无困难地完成。有关详细信息,请参阅Mercurial指南中的Removing history。
以下是您需要做的基本知识:
hg tip
将显示您)。我们称之为731。hg export 730-731 > ../local_clone1/changes.diff
(或您喜欢的任何地方)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
优点是历史仍然是不可变的,但显示了个性化变更集的添加和撤销。
使用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.
优点是个性化变更集消失了。缺点是变更集哈希值由于历史记录编辑而发生变化,因此永远不应该对已经推送给其他人的变更集进行更改。编辑历史记录也存在错误的风险。