3

我正在使用: 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 内容?

4

2 回答 2

2

当您使用 更新内部补丁.hg\patcheshg --mq update,您正在更改 mq 背后的 mq 补丁。换句话说:补丁本身会获得新内容,但不会自动重新应用。

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

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

您首先删除所有补丁,将它们更新为您想要的样子,然后重新应用它们。

为您hg --mq update执行此操作实际上是一个有趣的想法,而且我知道您不是第一个对两个命令之间缺乏集成感到惊讶的人。

于 2011-09-26T15:17:05.640 回答
-1

您应该在浏览队列中的补丁时使用qpushand 。qpop

教程

补丁队列方面实际上也相当不错。例如,您可以同时在同一个队列中处理应用程序的两个不同层(低级别的和建立在其之上的),而不会破坏任何东西。qpush 和 qpop将帮助您上下移动,同时保持您的更改分开。

于 2011-09-25T23:41:13.910 回答