Pessoalmente, não gosto de nenhuma das respostas postadas até agora:
- Não gosto de clone branching porque gosto que cada projeto tenha apenas um diretório. Trabalhar em diretórios diferentes ao mesmo tempo bagunça completamente a história dos arquivos recentes dos meus editores. Sempre acabo mudando o arquivo errado. Então eu não faço mais isso.
- Eu uso
shelve
para soluções rápidas (apenas para mover minhas alterações não confirmadas para outro branch, se perceber que estou no ramo errado). Você está falando sobre dias, de jeito nenhum eu engavetaria algo por dias.
- Eu acho que
mq
é muito complicado para uma situação tão comum
Acho que a melhor maneira é simplesmente confirmar suas alterações, depois voltar para o changeset antes de iniciar essas alterações e trabalhar a partir daí. Existem alguns problemas menores, deixe-me ilustrar:
Digamos que você tenha o changeset A. Em seguida, você inicia suas alterações. Neste ponto, você deve deixá-lo de lado por um tempo. Em primeiro lugar, comprometa o seu trabalho:
hg ci -m "Working on new stuff"
Se desejar, você pode adicionar um marcador para tornar mais fácil voltar mais tarde. Eu sempre crio marcadores para meus branches anônimos.
hg bookmark new-stuff
Volte para o conjunto de alterações antes dessas modificações
hg update A
A partir daqui, você trabalha e gera o changeset C. Agora que você tem 2 cabeças (B e C), você será avisado quando tentar empurrar. Você pode enviar apenas um branch, especificando o chefe desse branch:
hg push -r C
Ou você pode alterar a fase do new-stuff
branch para secreta. Changesets secretos não serão enviados.
hg phase -r new-stuff --secret --force