What's the best way to back out multiple changesets in mercurial?

前端 未结 5 757
Happy的楠姐
Happy的楠姐 2021-02-13 01:33

Is the most reliable method to go one-by-one, using the backout command for each of many changesets, or is there a way to create one big reversal changeset to cover a whole bunc

5条回答
  •  礼貌的吻别
    2021-02-13 02:21

    What I came up with is inelegant, but got the job done, despite that the changes I needed to back out were interspersed with other work and had some internal branching. Here's what I did. (Comments and improvements are welcome.)

    Got a list of all of the changesets (which I then used to generate the commands below):

    hg log -r 'keyword(xyz)' --template '{rev}\n'
    

    Generated a patch for each changeset:

    hg diff -p -U 8 --reverse -c 15094 > 15094.rev.patch
    hg diff -p -U 8 --reverse -c 15095 > 15095.rev.patch
    ...
    

    Then, applied each reverse patch. Here the order matters, last-to-first:

    hg import -m "reversing changeset 15302" 15302.rev.patch
    hg import -m "reversing changeset 15292" 15292.rev.patch
    ...
    

    This process was interrupted several times for merges that didn't go through automatically, where I had to manually apply changes to a file from its .rej file and then manually commit, before picking up the imports where it had left off.

    Finally (in another clone... did I mention I did this all in a clone?) I compressed the whole set of reverse changesets into one changeset using hg histedit -o and its fold command.

    Now I've got a single changeset that I should be able to reverse and apply if I decide to put the work back in at a later date (Although if I cross that bridge, I might apply the "forward" patches piecemeal again in order to get better blame/annotate information)

提交回复
热议问题