hg update --mq不工作?

时间:2011-09-25 21:56:46

标签: mercurial mercurial-queue

我正在使用:Mercurial Distributed SCM (version 1.9.1),我已完成以下操作:

D:\code\mqtest>hg init
D:\code\mqtest>hg qinit -c
D:\code\mqtest>echo NonQueue > first
D:\code\mqtest>hg st
? first
D:\code\mqtest>hg add first
D:\code\mqtest>hg commit -m nonqueue
D:\code\mqtest>hg log
changeset:   0:2d4bac63616a
tag:         tip
user:        Tempos
date:        Mon Sep 26 00:52:49 2011 +0300
summary:     nonqueue

D:\code\mqtest>hg log --mq
D:\code\mqtest>hg qnew a
D:\code\mqtest>echo Queue0 > first
D:\code\mqtest>hg st
M first   
D:\code\mqtest>hg qref
D:\code\mqtest>hg qcommit -m "queue 0"
D:\code\mqtest>echo Queue1 > first
D:\code\mqtest>hg qref
D:\code\mqtest>hg qcommit -m "queue 1"
D:\code\mqtest>echo Queue2 > first
D:\code\mqtest>hg qref
D:\code\mqtest>hg qcommit -m "queue 2"
D:\code\mqtest>hg st
D:\code\mqtest>hg log --mq
changeset:   2:38d08315a300
tag:         tip
user:        Tempos
date:        Mon Sep 26 00:53:46 2011 +0300
summary:     queue 2

changeset:   1:bb8b7da2e728
user:        Tempos
date:        Mon Sep 26 00:53:33 2011 +0300
summary:     queue 1

changeset:   0:1ac551a65492
user:        Tempos
date:        Mon Sep 26 00:53:22 2011 +0300
summary:     queue 0

我试图切换回mq中的特定修订版:

D:\code\mqtest>hg up -r 0 --mq
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
D:\code\mqtest>cat first
Queue2

为什么我没有看到Queue0内容?

2 个答案:

答案 0 :(得分:2)

使用.hg\patches更新hg --mq update内的修补程序时,您将更改mq后面的mq修补程序。换句话说:补丁本身会获得新内容,但不会自动重新应用。

所以你想要的工作流程是:

> hg qpop -a
> hg --mq update -r X
> hg qpush -a

首先删除所有修补程序,将其更新为您想要的样式,然后重新应用它们。

hg --mq update为你做这件事实际上是一个有趣的想法,我知道你不是第一个对这两个命令之间缺乏整合感到惊讶的人。

答案 1 :(得分:-1)

在浏览队列中的补丁时,您应该使用qpushqpop

来自tutorial

  

补丁队列方面实际上也很不错。你可以,为   例如,在应用程序的两个不同层上工作(某事   在同一个队列中的低级别和建立在其上的东西   同时没有破坏东西。 qpush和qpop 会帮助你提升   在保持你的变化分开的同时。