Pergunta

Estou usando Mercurial e entrei em uma bagunça terrível localmente, com três cabeças. Não posso pressionar e só quero excluir todas as minhas alterações e compromissos locais e começar de novo com código totalmente limpo e um histórico limpo.

Em outras palavras, quero acabar com (a) exatamente o mesmo código localmente que existe na ponta da ramificação remota e (b) nenhum histórico de nenhuma confirmação local.

Eu sei hg update -C substitui quaisquer alterações locais. Mas como faço para excluir algum compromisso local?

Para deixar claro, não tenho interesse em preservar nenhum dos trabalhos que fiz localmente. Eu só quero a maneira mais simples de voltar a uma compra local totalmente limpa.

Foi útil?

Solução

Quando a maneira mais simples (um novo hg clone) não é prático, eu uso hg strip:

% hg outgoing -l 1
% hg strip $rev # replace $rev with the revision number from outgoing

Repetir até hg outgoing permanece quieto. Observe que hg strip $rev oblitera $rev e todos os seus descendentes.

Observe que você pode ter que primeiro ativar strip Em suas configurações mercuriais.

PS: Uma abordagem ainda mais inteligente é usar o idioma RevSet e fazer:

% hg strip 'roots(outgoing())'

Outras dicas

Você deseja fazer um clone local, onde preserva apenas as mudanças que também estão presentes no repositório remoto. Usar Tortoisehg, hg log ou semelhante a descobrir qual das suas revisões é a última revisão que você não faça (o antes da bagunça começar). Usando hg outgoing Pode ajudar aqui - ele listará todas as alterações que você fez - escolha um número de revisão antes de qualquer um deles.

Se a revisão alvo for chamada good e seu clone é chamado foo, então faça:

hg clone -r good foo foo-clean

Esta será uma operação local rápida - existe Não há razão para baixar tudo de novo. o foo-clean O clone só conterá alterações até a revisão good. Agora você pode substituir foo-clean/.hg/hgrc com foo/.hg/hgrc Para preservar suas configurações de repositório local, como o caminho de push/puxar padrão.

Quando você está satisfeito que foo-clean tem tudo o que você precisa de foo, então simplesmente exclua foo e renomear foo-clean para foo. Faça um hg pull Para obter novos alterações do repositório remoto em seu clone e continue como normal.


Se ninguém empurrou novas mudanças para o repositório remoto, é muito simples determinar qual revisão você deseja usar good acima de: hg id default dirá o ID da dica no repositório remoto.

OK. Então, apenas exclua todas as coisas locais, hg init o novo repositório local e hg pull a última dica que você tem. Não se esqueça de hg update depois disto.

Você pode usar

Revisão da tira HG

matar qualquer revisão e sua subárvore no seu repositório local.

https://www.mercurial-scm.org/wiki/strip

Mas não tente usá -lo para qualquer coisa que já tenha sido empurrada.

Basta excluir tudo o que você tem no sistema local e recolocar novamente o repositório remoto.

hg strip `hg out --template "{rev} {author}\n" | grep YOUR_AUTHOR_NAME | cut -d " " -f 1`

faz o truque para mim.

Ele tira todas as revisões que não são empurradas para o repositório padrão criado com o nome do seu autor.

Você também pode usar esse estilo para fazê -lo não verificar com o repositório padrão, mas com outro repositório

hg strip `hg out OTHER_REPO_ALIAS --template "{rev} {author}\n" | grep YOUR_AUTHOR_NAME | cut -d " " -f 1`

Se você estiver usando o TortoiseHG, uma maneira simples de sair de uma bagunça (pequena) é primeiro atualizar para a revisão mais recente, selecionar suas alterações e iniciar "mesclar com o local". Quando o diálogo de mesclagem aparecer, basta clicar no ícone Little '+' para revelar algumas opções extras, uma das quais é "descartar as mudanças da revisão Merge Target (outras)". Fazer isso significará que suas mudanças ainda estarão no repositório e serão empurradas, mas não terão efeito, porque elas serão descartadas na mesclagem. Se você tiver muitas mudanças que abrangem muitas cabeças, talvez não queira poluir o repositório dessa maneira, mas é uma solução simples e vale a pena considerar se as alterações que você está descartando contêm dados que você pode mais tarde fazer referência.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top