Discard all and get clean copy of latest revision?

后端 未结 5 2090
Happy的楠姐
Happy的楠姐 2021-01-29 19:21

I\'m moving a build process to use mercurial and want to get the working directory back to the state of the tip revision. Earlier runs of the build process will have modified so

相关标签:
5条回答
  • 2021-01-29 19:27

    To delete untracked on *nix without the purge extension you can use

    hg pull
    hg update -r MY_BRANCH -C
    hg status -un|xargs rm
    

    Which is using

    update -r --rev REV revision

    update -C --clean discard uncommitted changes (no backup)

    status -u --unknown show only unknown (not tracked) files

    status -n --no-status hide status prefix

    0 讨论(0)
  • 2021-01-29 19:32
    hg up -C
    

    This will remove all the changes and update to the latest head in the current branch.

    And you can turn on purge extension to be able to remove all unversioned files too.

    0 讨论(0)
  • 2021-01-29 19:47

    Those steps should be able to be shortened down to:

    hg pull
    hg update -r MY_BRANCH -C
    

    The -C flag tells the update command to discard all local changes before updating.

    However, this might still leave untracked files in your repository. It sounds like you want to get rid of those as well, so I would use the purge extension for that:

    hg pull
    hg update -r MY_BRANCH -C
    hg purge
    

    In any case, there is no single one command you can ask Mercurial to perform that will do everything you want here, except if you change the process to that "full clone" method that you say you can't do.

    0 讨论(0)
  • 2021-01-29 19:50

    If you're looking for a method that's easy, then you might want to try this.

    I for myself can hardly remember commandlines for all of my tools, so I tend to do it using the UI:


    1. First, select "commit"

    2. Then, display ignored files. If you have uncommitted changes, hide them.

    3. Now, select all of them and click "Delete Unversioned".

    Done. It's a procedure that is far easier to remember than commandline stuff.

    0 讨论(0)
  • 2021-01-29 19:50

    hg status will show you all the new files, and then you can just rm them.

    Normally I want to get rid of ignored and unversioned files, so:

    hg status -iu                          # to show 
    hg status -iun0 | xargs -r0 rm         # to destroy
    

    And then follow that with:

    hg update -C -r xxxxx
    

    which puts all the versioned files in the right state for revision xxxx


    To follow the Stack Overflow tradition of telling you that you don't want to do this, I often find that this "Nuclear Option" has destroyed stuff I care about.

    The right way to do it is to have a 'make clean' option in your build process, and maybe a 'make reallyclean' and 'make distclean' too.

    0 讨论(0)
提交回复
热议问题