Luc*_*cas 95 compression mercurial push changeset
假设我有一个本地和一个远程Mercurial存储库.现在,我开始研究一个功能.我正在努力,当我认为它完成后,我提交变更集.再测试一下,我发现我可以通过调整代码中的内容来进一步改进这个功能.我做出改变并提交.20分钟后,我发现这个新功能有一个错误,所以我修复它并提交它.
我现在有3个变更集,我真的想将其作为一个变更集推送到远程存储库,例如,消息"实现功能X".
如何在没有太多麻烦的情况下做到这一点?我相信我可以用补丁来做,但看起来很多工作.
Ste*_*sek 52
该histedit扩展正是你所期待的.
hg histedit -o
Run Code Online (Sandbox Code Playgroud)
要么
hg histedit --outgoing
Run Code Online (Sandbox Code Playgroud)
将显示传出变更集的列表.从列表中你可以
histedit将提示您输入折叠变更集的新提交消息,默认为两个消息,"\n***\n"将它们分开.
你也可以使用mq扩展获得类似的结果,但它要困难得多.
您也可以使用折叠扩展来进行折叠,但它不提供良好的UI,也不提供编辑生成的提交消息的方法.编辑生成的提交消息还允许清理最终消息,这是我总是最终使用的.
Ark*_*ady 21
是的,您可以使用补丁来执行此操作:假设您的工作处于变更集100到110(包括100和110)
创建补丁:
% hg export -o mypatch 100:110 --git
更新到99:
% hg update 99
使用--no-commit应用补丁(否则您将获得所有更改集):
% hg import --no-commit mypatch
立即提交所有更改:
% hg commit
你现在有两个头(110和111),它们在你工作目录中产生的文件应该是等价的 - 也许在剥离旧的文件之前将它们区分开来:
% hg strip 100
好吧,既然我把它全部拼出来了,它确实看起来很冗长,但是我自己做了很多次,我觉得它不是太多的苦差事......
小智 19
如果您使用TortoiseHg,请使用只需选择两个修订版(使用CTRL选择非后续版本),右键单击并选择"压缩历史记录".
之后,您将从之前选择的第一个更改中获得新头的新更改列表,它将包含您选择的更改列表之间的所有后续更改列表.
如果您不再需要它们,您可以简单地删除旧的更改列表:使用MQ扩展.再次,在TortoiseHg中:右键单击第一个需要用它的所有后代剥离的更改列表,"修改历史 - >剥离".
Chr*_*ips 18
我使用mq进行折叠的首选方法是使用TortoiseHg ,如此处所述.但是,它可以很容易地从命令行完成,如下所示:
hg qimport -r <first>:<last>
-- where <first> and <last> are the first and last changesets
-- in the range of revisions you want to collapse
hg qpop <first>.diff
-- remove all except for the first patch from the queue
-- note: mq names patches <#>.diff when it imports them, so we're using that here
hg qfold <next>.diff
-- where <next> is <first>+1, then <first>+2, until you've reached <last>
hg qfinish -a
-- apply the folded changeset back into the repository
Run Code Online (Sandbox Code Playgroud)
(可能有更好的方法来执行qfold步骤,但我不知道它,因为我通常使用TortoiseHg进行该操作.)
一开始看起来有点复杂,但是一旦你开始使用mq,它就非常简单和自然 - 而且你可以使用mq做各种其他的东西,非常方便!