Como posso desfazer minha última alteração acidentalmente confirmada (não pressionada) no Mercurial?
Se possível, seria preferível uma maneira de fazê-lo com o TortoiseHg.
Atualizar
No meu caso concreto, cometei um conjunto de alterações (não pressionado). Então eu puxei e atualizei do servidor. Com essas novas atualizações, decidi que meu último commit está obsoleto e não quero sincronizá-lo. Parece que hg rollback
não é exatamente isso que estou procurando, porque reverteria a atração em vez do meu commit.
mercurial
tortoisehg
mercurial-commit
Martin Buberl
fonte
fonte
hg rollback
e depois puxar novamente?strip --keep
: stackoverflow.com/questions/29413851/… resolve diretamente a tarefa, assim como o MQ qimport. Como alternativa, pode ser melhor simplesmenterebase
no cenário se as alterações locais também forem mantidas e não houver conflito. (Use uma mesclagem para manter algumas alterações combinadas de ambas as ramificações quando esse for o objetivo final do gráfico desejado, especialmente em um caso não-rápido.) Também pode ser válido apenas para fechar a ramificação, que ainda 'preserva o histórico' (mas diferente de uma mesclagem), dependendo do estado final desejado.hg strip --keep
é o comando fazer uso, mas você precisa fornecer uma revisão, por exemplo:hg strip --keep -r .
. Esta resposta explica bem stackoverflow.com/a/19064016/1286571Respostas:
Uma maneira seria
(descontinuado em Hg2.7, agosto de 2013)hg rollback
Consulte a seção Recuperação do TortoiseHg :
Este tópico também detalha a diferença entre
hg rollback
ehg strip
:(escrito por Martin Geisler, que também contribui com SO)
ForeverWintr sugere nos comentários (em 2016, 5 anos depois)
fonte
hg rollback
desfará a atração em vez da confirmação.hg commit --amend
deve funcionar, mas, para mim, me deu um editor para modificar a mensagem de confirmação e nenhum método para alterar quais arquivos foram incluídos. Saí do editor sem salvar e descobri que minha confirmação incorreta foi alterada para incluir TODOS os arquivos alterados!hg commit --amend
. Você pode 'cancelar a confirmação' dos arquivos,hg forget
selecionando-os primeiro , por exemplo::hg forget filea; hg commit --amend
, mas isso parece pouco intuitivo. hg strip --keep é provavelmente a melhor solução para os hg modernos.hg strip
removerá completamente uma revisão (e quaisquer descendentes) do repositório.Para usar o strip, você precisará instalar o MqExtension adicionando as seguintes linhas ao seu .hgrc (ou mercurial.ini):
No TortoiseHg, o comando strip está disponível no ambiente de trabalho. Clique com o botão direito do mouse em uma revisão e escolha 'Histórico de modificações' -> 'Faixa'.
Como
strip
altera o histórico do repositório, você deve usá-lo apenas em revisões que ainda não foram compartilhadas com ninguém. Se você estiver usando o mercurial 2.1+, poderá usar fases para rastrear essas informações. Se um commit ainda estiver na fase de rascunho, ele não será compartilhado com outros repositórios para que você possa removê-lo com segurança. (Obrigado a Zasurus por apontar isso).fonte
Como você não pode reverter, você deve mesclar esse commit na nova cabeça que recebeu quando puxou. Se você não deseja nenhum trabalho realizado, pode fazê-lo facilmente usando esta dica .
Portanto, se você puxou e atualizou a cabeça deles, pode fazer o seguinte:
mantém todas as alterações na revisão com check-out atual e nenhuma delas na revisão sem check-out (aquela que você escreveu que não deseja mais).
Essa é uma ótima maneira de fazer isso, pois mantém seu histórico preciso e completo. Se daqui a dois anos alguém encontrar um bug no que você removeu, você pode olhar na sua implementação (não usada, mas salva) da mesma coisa e dizer "ah, eu fiz direito". :)
fonte
hg rollback
é o que você quer.No TortoiseHg, isso
hg rollback
é realizado na caixa de diálogo de confirmação. Abra a caixa de diálogo de confirmação e selecione "Desfazer".fonte
Na versão atual do TortoiseHg Workbench 4.4.1 (07.2018), pode utilizar
Repository
-Rollback/undo...
:fonte
Sua solução alternativa.
Se você não enviar para o servidor, irá clonar na nova pasta ou remover (excluir todos os arquivos) da pasta do repositório e clonar novo.
fonte
depois de extrair e atualizar sua área de trabalho, faça um thg e clique com o botão direito do mouse no conjunto de alterações que deseja se livrar e, em seguida, clique em modificar histórico -> faixa, ele removerá o conjunto de alterações e você apontará para a dica padrão.
fonte