How to go back to a tag in darcs?

I'd like to checkout an older tagged state in the current darcs repo (its working dir).

I don't want to clone to another directory (because I have setup a cabal sandbox in the current directory).

I have already pushed all new changes to a remote repo, so I don't really care whether the changes are completely lost locally. (But still: can't I keep the patches saved, but still checkout an older state?)

How to do this?

Attempts

I tried

darcs obliterate --from-tag=TAG

but that gave not exactly the result I wanted. This obliterated the tag, too!

So, to get TAG back, I had to darcs pull and select the first patch in the row (TAG), and press d to skip all other patches.

Well, darcs obliterate --from-tag=TAG did ask interactively what to obliterate, so I could theoretically leave TAG, but it starts asking from the most recent patch, so I had to go through many recent patches, before I could inform darcs of my decision to leave TAG.

Upvotes: 1

Views: 288

Answers (1)

Ganesh Sittampalam
Ganesh Sittampalam

Reputation: 29100

You can use the --reverse option to obliterate to ask about the tag first, say n to that and then a to unpull all the rest.

In fact obliterate --from-tag won't necessarily select everything not covered by the tag, as its behaviour depends on the specific order patches and tags are currently in the repository.

So after the first obliterate, I would do another one without the --from-tag and without --reverse. This time the tag will be offered first (as everything after it will be gone), you can say n to that, and then a to everything else - only patches that aren't covered by the tag will be offered after the tag is rejected.

In the relatively unlikely event that a lot of patches including another tag are caught by this, you may need to repeat this until it stops offering more patches.

On the topic of how to keep hold of the patches while moving back to an older state, the -o and -O options to obliterate allow you to save the patches that are removed to disk. You can then restore them later with 'darcs apply'. However you do need to be careful not to then amend any patches left in your local repository, or to obliterate other patches without keeping them, as that could make the saved patches inapplicable.

Upvotes: 1

Related Questions