bos@559: bos@559: bos@559: bos@572: bos@559: Mercurial Queues reference bos@559: bos@559: bos@559: MQ command reference bos@559: bos@584: For an overview of the commands provided by MQ, use the bos@559: command hg help mq. bos@559: bos@559: bos@559: <command role="hg-ext-mq">qapplied</command>&emdash;print bos@559: applied patches bos@559: bos@584: The qapplied command bos@559: prints the current stack of applied patches. Patches are bos@559: printed in oldest-to-newest order, so the last patch in the bos@559: list is the top patch. bos@559: bos@559: bos@559: bos@559: <command role="hg-ext-mq">qcommit</command>&emdash;commit bos@559: changes in the queue repository bos@559: bos@584: The qcommit command bos@559: commits any outstanding changes in the .hg/patches bos@559: repository. This command only works if the .hg/patches bos@559: directory is a repository, i.e. you created the directory bos@559: using hg qinit or bos@559: ran hg init in the directory bos@559: after running qinit. bos@559: bos@584: This command is shorthand for hg bos@559: commit --cwd .hg/patches. bos@580: bos@580: bos@580: <command bos@559: role="hg-ext-mq">qdelete</command>&emdash;delete a patch bos@559: from the <filename role="special">series</filename> dongsheng@651: file bos@559: bos@584: The qdelete command bos@559: removes the entry for a patch from the series file in the .hg/patches bos@559: directory. It does not pop the patch if the patch is already bos@559: applied. By default, it does not delete the patch file; use bos@559: the option bos@559: to do that. bos@559: bos@584: Options: bos@584: bos@584: : Delete the bos@559: patch file. bos@559: bos@559: bos@559: bos@559: bos@559: <command role="hg-ext-mq">qdiff</command>&emdash;print a bos@559: diff of the topmost applied patch bos@559: bos@584: The qdiff command bos@559: prints a diff of the topmost applied patch. It is equivalent bos@559: to hg diff -r-2:-1. bos@559: bos@559: bos@559: bos@701: <command role="hg-ext-mq">qfold</command>&emdash;move bos@701: applied patches into repository history bos@701: bos@702: The hg qfinish command converts the bos@701: specified applied patches into permanent changes by moving bos@701: them out of MQ's control so that they will be treated as bos@701: normal repository history. bos@701: bos@701: bos@701: bos@559: <command role="hg-ext-mq">qfold</command>&emdash;merge bos@559: (<quote>fold</quote>) several patches into one bos@559: bos@584: The qfold command bos@559: merges multiple patches into the topmost applied patch, so bos@559: that the topmost applied patch makes the union of all of the bos@559: changes in the patches in question. bos@559: bos@584: The patches to fold must not be applied; qfold will exit with an error if bos@559: any is. The order in which patches are folded is significant; bos@559: hg qfold a b means bos@559: apply the current topmost patch, followed by bos@559: a, followed by bos@559: b. bos@559: bos@584: The comments from the folded patches are appended to the bos@559: comments of the destination patch, with each block of comments bos@559: separated by three asterisk bos@559: (*) characters. Use the bos@559: option to bos@559: edit the commit message for the combined patch/changeset after bos@559: the folding has completed. bos@559: bos@584: Options: bos@584: bos@584: : Edit the bos@559: commit message and patch description for the newly folded bos@559: patch. bos@559: bos@584: : Use the bos@559: contents of the given file as the new commit message and bos@559: patch description for the folded patch. bos@559: bos@584: : Use the bos@559: given text as the new commit message and patch description bos@559: for the folded patch. bos@559: bos@559: bos@559: bos@559: bos@559: <command bos@559: role="hg-ext-mq">qheader</command>&emdash;display the bos@559: header/description of a patch bos@559: bos@584: The qheader command bos@559: prints the header, or description, of a patch. By default, it bos@559: prints the header of the topmost applied patch. Given an bos@559: argument, it prints the header of the named patch. bos@559: bos@559: bos@559: bos@559: <command role="hg-ext-mq">qimport</command>&emdash;import bos@559: a third-party patch into the queue bos@559: bos@584: The qimport command bos@559: adds an entry for an external patch to the series file, and copies the patch bos@559: into the .hg/patches directory. It adds bos@559: the entry immediately after the topmost applied patch, but bos@559: does not push the patch. bos@559: bos@584: If the .hg/patches directory is a bos@559: repository, qimport bos@559: automatically does an hg add bos@559: of the imported patch. bos@559: bos@559: bos@559: bos@559: <command role="hg-ext-mq">qinit</command>&emdash;prepare bos@559: a repository to work with MQ bos@559: bos@584: The qinit command bos@559: prepares a repository to work with MQ. It creates a directory bos@559: called .hg/patches. bos@559: bos@584: Options: bos@584: bos@584: : Create bos@559: .hg/patches as a repository bos@559: in its own right. Also creates a .hgignore file that will bos@559: ignore the status bos@559: file. bos@559: bos@559: bos@584: When the .hg/patches directory is a bos@559: repository, the qimport bos@559: and qnew commands bos@559: automatically hg add new bos@559: patches. bos@559: bos@559: bos@559: bos@559: <command role="hg-ext-mq">qnew</command>&emdash;create a bos@559: new patch bos@559: bos@584: The qnew command bos@559: creates a new patch. It takes one mandatory argument, the bos@559: name to use for the patch file. The newly created patch is bos@559: created empty by default. It is added to the series file after the current bos@559: topmost applied patch, and is immediately pushed on top of bos@559: that patch. bos@559: bos@584: If qnew finds modified bos@559: files in the working directory, it will refuse to create a new bos@559: patch unless the option is used bos@672: (see below). This behavior allows you to qrefresh your topmost applied bos@559: patch before you apply a new patch on top of it. bos@559: bos@584: Options: bos@584: bos@584: : Create a new bos@559: patch if the contents of the working directory are bos@559: modified. Any outstanding modifications are added to the bos@559: newly created patch, so after this command completes, the bos@559: working directory will no longer be modified. bos@559: bos@584: : Use the given bos@559: text as the commit message. This text will be stored at bos@559: the beginning of the patch file, before the patch bos@559: data. bos@559: bos@559: bos@559: bos@559: bos@559: <command role="hg-ext-mq">qnext</command>&emdash;print bos@559: the name of the next patch bos@559: bos@584: The qnext command bos@559: prints the name name of the next patch in the series file after the topmost bos@559: applied patch. This patch will become the topmost applied bos@559: patch if you run qpush. bos@559: bos@559: bos@559: bos@559: <command role="hg-ext-mq">qpop</command>&emdash;pop bos@559: patches off the stack bos@559: bos@584: The qpop command bos@559: removes applied patches from the top of the stack of applied bos@559: patches. By default, it removes only one patch. bos@559: bos@584: This command removes the changesets that represent the bos@559: popped patches from the repository, and updates the working bos@559: directory to undo the effects of the patches. bos@559: bos@584: This command takes an optional argument, which it uses as bos@559: the name or index of the patch to pop to. If given a name, it bos@559: will pop patches until the named patch is the topmost applied bos@559: patch. If given a number, qpop treats the number as an bos@559: index into the entries in the series file, counting from zero bos@559: (empty lines and lines containing only comments do not count). bos@559: It pops patches until the patch identified by the given index bos@559: is the topmost applied patch. bos@559: bos@584: The qpop command does bos@559: not read or write patches or the series file. It is thus safe to bos@559: qpop a patch that you have bos@559: removed from the series bos@559: file, or a patch that you have renamed or deleted entirely. bos@559: In the latter two cases, use the name of the patch as it was bos@559: when you applied it. bos@559: bos@584: By default, the qpop bos@559: command will not pop any patches if the working directory has bos@672: been modified. You can override this behavior using the bos@559: option, bos@559: which reverts all modifications in the working bos@559: directory. bos@559: bos@584: Options: bos@584: bos@584: : Pop all bos@559: applied patches. This returns the repository to its state bos@559: before you applied any patches. bos@559: bos@584: : Forcibly bos@559: revert any modifications to the working directory when bos@559: popping. bos@559: bos@584: : Pop a patch bos@559: from the named queue. bos@559: bos@559: bos@584: The qpop command bos@559: removes one line from the end of the status file for each patch that it bos@559: pops. bos@559: bos@559: bos@559: bos@559: <command role="hg-ext-mq">qprev</command>&emdash;print bos@559: the name of the previous patch bos@559: bos@584: The qprev command bos@559: prints the name of the patch in the series file that comes before the bos@559: topmost applied patch. This will become the topmost applied bos@559: patch if you run qpop. bos@559: bos@559: bos@559: bos@559: <command role="hg-ext-mq">qpush</command>&emdash;push bos@559: patches onto the stack bos@559: bos@584: The qpush command adds bos@559: patches onto the applied stack. By default, it adds only one bos@559: patch. bos@559: bos@584: This command creates a new changeset to represent each bos@559: applied patch, and updates the working directory to apply the bos@559: effects of the patches. bos@559: bos@584: The default data used when creating a changeset are as bos@559: follows: bos@559: bos@584: The commit date and time zone are the current bos@559: date and time zone. Because these data are used to bos@559: compute the identity of a changeset, this means that if bos@559: you qpop a patch and bos@559: qpush it again, the bos@559: changeset that you push will have a different identity bos@559: than the changeset you popped. bos@559: bos@584: The author is the same as the default used by bos@559: the hg commit bos@559: command. bos@559: bos@584: The commit message is any text from the patch bos@559: file that comes before the first diff header. If there is bos@559: no such text, a default commit message is used that bos@559: identifies the name of the patch. bos@559: bos@701: If a patch contains a Mercurial patch header, bos@701: the information in the patch header overrides these bos@559: defaults. bos@559: bos@584: Options: bos@584: bos@584: : Push all bos@559: unapplied patches from the series file until there are bos@559: none left to push. bos@559: bos@584: : Add the name bos@559: of the patch to the end of the commit message. bos@559: bos@584: : If a patch bos@559: fails to apply cleanly, use the entry for the patch in bos@559: another saved queue to compute the parameters for a bos@559: three-way merge, and perform a three-way merge using the bos@559: normal Mercurial merge machinery. Use the resolution of bos@559: the merge as the new patch content. bos@559: bos@584: : Use the bos@559: named queue if merging while pushing. bos@559: bos@559: bos@584: The qpush command bos@559: reads, but does not modify, the series file. It appends one line bos@559: to the hg status file for bos@559: each patch that it pushes. bos@559: bos@559: bos@559: bos@559: <command bos@559: role="hg-ext-mq">qrefresh</command>&emdash;update the bos@559: topmost applied patch bos@559: bos@584: The qrefresh command bos@559: updates the topmost applied patch. It modifies the patch, bos@559: removes the old changeset that represented the patch, and bos@559: creates a new changeset to represent the modified bos@559: patch. bos@559: bos@584: The qrefresh command bos@559: looks for the following modifications: bos@559: bos@584: Changes to the commit message, i.e. the text bos@559: before the first diff header in the patch file, are bos@559: reflected in the new changeset that represents the bos@559: patch. bos@559: bos@584: Modifications to tracked files in the working bos@559: directory are added to the patch. bos@559: bos@584: Changes to the files tracked using hg add, hg copy, hg remove, or hg rename. Added files and copy bos@559: and rename destinations are added to the patch, while bos@559: removed files and rename sources are removed. bos@559: bos@559: bos@584: Even if qrefresh bos@559: detects no changes, it still recreates the changeset that bos@559: represents the patch. This causes the identity of the bos@559: changeset to differ from the previous changeset that bos@559: identified the patch. bos@559: bos@584: Options: bos@584: bos@584: : Modify bos@559: the commit and patch description, using the preferred text bos@559: editor. bos@559: bos@584: : Modify bos@559: the commit message and patch description, using the given bos@559: text. bos@559: bos@584: : Modify bos@559: the commit message and patch description, using text from bos@559: the given file. bos@559: bos@559: bos@559: bos@559: bos@559: <command role="hg-ext-mq">qrename</command>&emdash;rename bos@559: a patch bos@559: bos@584: The qrename command bos@559: renames a patch, and changes the entry for the patch in the bos@559: series file. bos@559: bos@584: With a single argument, qrename renames the topmost bos@559: applied patch. With two arguments, it renames its first bos@559: argument to its second. bos@559: bos@559: bos@559: bos@559: <command role="hg-ext-mq">qseries</command>&emdash;print bos@559: the entire patch series bos@559: bos@584: The qseries command bos@559: prints the entire patch series from the series file. It prints only patch bos@559: names, not empty lines or comments. It prints in order from bos@559: first to be applied to last. bos@559: bos@559: bos@559: bos@559: <command role="hg-ext-mq">qtop</command>&emdash;print the bos@559: name of the current patch bos@559: bos@584: The qtop prints the bos@559: name of the topmost currently applied patch. bos@559: bos@559: bos@559: bos@559: <command bos@559: role="hg-ext-mq">qunapplied</command>&emdash;print patches bos@559: not yet applied bos@559: bos@584: The qunapplied command bos@559: prints the names of patches from the series file that are not yet bos@559: applied. It prints them in order from the next patch that bos@559: will be pushed to the last. bos@559: bos@559: bos@559: bos@559: <command role="hg-cmd">hg strip</command>&emdash;remove a bos@559: revision and descendants bos@559: bos@584: The hg strip command bos@559: removes a revision, and all of its descendants, from the bos@559: repository. It undoes the effects of the removed revisions bos@559: from the repository, and updates the working directory to the bos@559: first parent of the removed revision. bos@559: bos@584: The hg strip command bos@559: saves a backup of the removed changesets in a bundle, so that bos@559: they can be reapplied if removed in error. bos@559: bos@584: Options: bos@584: bos@584: : Save bos@559: unrelated changesets that are intermixed with the stripped bos@559: changesets in the backup bundle. bos@559: bos@584: : If a bos@701: branch has multiple heads, remove all heads. bos@559: bos@584: : Do bos@559: not save a backup bundle. bos@559: bos@559: bos@559: bos@559: bos@559: bos@559: MQ file reference bos@559: bos@559: bos@559: The <filename role="special">series</filename> bos@559: file bos@559: bos@584: The series file bos@559: contains a list of the names of all patches that MQ can apply. bos@559: It is represented as a list of names, with one name saved per bos@559: line. Leading and trailing white space in each line are bos@559: ignored. bos@559: bos@584: Lines may contain comments. A comment begins with the bos@559: # character, and extends to bos@559: the end of the line. Empty lines, and lines that contain only bos@559: comments, are ignored. bos@559: bos@584: You will often need to edit the series file by hand, hence the bos@559: support for comments and empty lines noted above. For bos@559: example, you can comment out a patch temporarily, and qpush will skip over that patch bos@559: when applying patches. You can also change the order in which bos@559: patches are applied by reordering their entries in the bos@559: series file. bos@559: bos@584: Placing the series bos@559: file under revision control is also supported; it is a good bos@559: idea to place all of the patches that it refers to under bos@559: revision control, as well. If you create a patch directory bos@559: using the bos@559: option to qinit, this will bos@559: be done for you automatically. bos@559: bos@559: bos@559: bos@559: The <filename role="special">status</filename> bos@559: file bos@559: bos@584: The status file bos@559: contains the names and changeset hashes of all patches that MQ bos@559: currently has applied. Unlike the series file, this file is not bos@559: intended for editing. You should not place this file under bos@559: revision control, or modify it in any way. It is used by MQ bos@559: strictly for internal book-keeping. bos@559: bos@559: bos@559: bos@559: bos@559: bos@559: