Estou usando o Mercurial e me meti em uma confusão terrível localmente, com três cabeças. Não posso enviar push e só quero deletar todas as minhas alterações e commits locais e começar de novo com um código totalmente limpo e um histórico limpo.
Em outras palavras, quero terminar com (a) exatamente o mesmo código localmente que existe na ponta do branch remoto e (b) sem histórico de quaisquer commits locais.
Eu sei que hg update -C
substitui todas as alterações locais. Mas como excluo qualquer commit local?
Para ser claro, não tenho interesse em preservar nenhum dos trabalhos que fiz localmente. Só quero a maneira mais simples de voltar a um checkout local totalmente limpo.
version-control
mercurial
dvcs
head
Richard
fonte
fonte
Respostas:
Quando a maneira mais simples (uma nova
hg clone
) não é prática, eu usohg strip
:Repita até
hg outgoing
ficar quieto. Observe quehg strip $rev
oblitera$rev
e todos os seus descendentes.Observe que pode ser necessário primeiro habilitar
strip
nas configurações do Mercurial .PS: uma abordagem ainda mais inteligente é usar a linguagem revset e fazer:
fonte
hg strip 'roots(outgoing())'
para chegar ao trabalho por não reconhecer'roots(outgoing())'
. Consegui fazer funcionarhg strip "roots(outgoing())"
.cmd.exe
, sim.Você desejará fazer um clone local onde preserva apenas os conjuntos de alterações que também estão presentes no repositório remoto. Use TortoiseHg ,
hg log
ou similar para descobrir qual de suas revisões é a última revisão que você não fez (aquela antes da bagunça começar). Usarhg outgoing
pode ajudar aqui - ele listará todos os conjuntos de alterações que você fez - escolha um número de revisão anterior a qualquer um deles.Se a revisão de destino for chamada
good
e seu clone for chamadofoo
, faça:Esta será uma operação local rápida - não há razão para baixar tudo novamente . O
foo-clean
clone conterá apenas conjuntos de alterações até a revisãogood
. Agora você pode substituirfoo-clean/.hg/hgrc
porfoo/.hg/hgrc
para preservar suas configurações locais de repositório, como o caminho padrão push / pull.Quando estiver satisfeito
foo-clean
com tudo de que você precisafoo
, basta excluirfoo
e renomearfoo-clean
parafoo
. Faça umhg pull
para obter quaisquer novos changesets do repositório remoto em seu clone e continue normalmente.Se ninguém enviou novos conjuntos de alterações para o repositório remoto, então é muito simples determinar qual revisão você deseja usar como
good
acima:hg id default
irá lhe dizer o ID da dica no repositório remoto.fonte
hg pull -r
a última revisão "boa" de cada branch adicional.Está bem. Portanto, apenas exclua todo o material local,
hg init
o novo repositório local ehg pull
a última dica que você tiver. Não se esqueça dehg update
depois disso.fonte
hg init
+hg pull
=hg clone
A diferença é quehg clone
é um bom.hg/hgrc
arquivo para você e quehg clone
usará hardlinks para economizar espaço ao clonar no mesmo sistema de arquivos.hg help init
está aqui: selenic.com/mercurial/hg.1.html#init Mas talvez isso seja muito conciso? Envie um e-mail para nossa lista de discussão se precisar de mais ajuda! Veja: mercurial.selenic.com/wiki/MailingListsVocê pode usar
para eliminar qualquer revisão e sua subárvore em seu repositório local.
https://www.mercurial-scm.org/wiki/Strip
Mas não tente usá-lo para nada que já tenha sido enviado.
fonte
Basta excluir tudo o que você tem em seu sistema local e clonar novamente o repositório remoto.
fonte
faz o truque para mim.
Ele remove todas as revisões que não foram enviadas para o repositório padrão que foram criadas com o seu nome de autor.
Você também pode usar este estilo para torná-lo não verificando com o repositório padrão, mas com outro Repositório
fonte
Se você estiver usando o TortoiseHg, uma maneira simples de sair de uma (pequena) bagunça é primeiro atualizar para a revisão mais recente, depois selecionar seus conjuntos de alterações e iniciar a "fusão com local". Quando a caixa de diálogo de mesclagem aparecer, simplesmente clique no pequeno ícone '+' para revelar algumas opções extras, uma das quais é "descartar conjuntos de alterações da revisão de destino de mesclagem (outra)". Isso significa que seus conjuntos de alterações ainda estarão no repo e serão enviados por push, mas não terão efeito, porque serão descartados na fusão. Se você tiver muitos conjuntos de alterações abrangendo várias cabeças, talvez não queira poluir o repo dessa maneira, mas é uma correção simples e vale a pena considerar se os conjuntos de alterações que você está descartando contêm dados que você pode querer consultar posteriormente.
fonte