Há um commit que simplesmente não funcionou, então eu quero abandoná-lo sem excluí-lo da história .
Atualizei a partir de uma revisão anterior e cometi, criando assim um novo chefe.
Não tenho galhos, não quero galhos, só quero continuar com a nova cabeça exatamente como é, nada extravagante, sem fusão, sem preocupações, apenas esquecendo a anterior.
Parece que não consigo descobrir como fazer isso, e estou começando a acreditar que isso não pode ser feito. Tudo o que encontro são coisas sobre galhos ou coisas sobre fusão.
Respostas:
Atualize seu repositório na cabeça com a revisão que deseja esquecer e use
hg commit --close-branch
para marcar essa ramificação (anônima) como fechada. Em seguida, atualize para a cabeça do ramo que você não quer, e continuar a trabalhar.Você ainda pode ver a ramificação fechada se usar a
-c
opçãohg heads
, mas ela não será exibida por padrão ehg merge
saberá que não tentará mesclar com a cabeça fechada.Você precisará usar
hg push --force
a primeira vez que enviar essa cabeça fechada para outro repositório, pois na verdade você cria cabeças adicionais no repositório remoto ao fazer o envio. Então diga à Mercurial que está tudo bem--force
. As pessoas que puxam a cabeça fechada não serão incomodadas por nenhum aviso.fonte
hg heads
... Estou usando o mercurial 1.4.3, esse é um recurso mais recente?hg branches
ainda deve mostrar o nome da filial em que você está. Em vez de tentar fechar a ramificação, mescle sua ramificação anônima novamente na ramificação original, descartando todas as alterações.Sei que você não deseja trabalhar com ramificações nesse estágio, mas foi exatamente isso que você fez. Quando você voltou para uma versão anterior e comprometeu algo que funcionou, você criou uma ramificação - uma ramificação sem nome, mas uma ramificação da mesma forma.
Não há problema em continuar do jeito que você é e não se preocupar em ter várias cabeças, mas se você quiser arrumar as coisas para não escolher acidentalmente a cabeça errada uma vez, poderá matar o galho antigo.
Há uma boa seção na documentação do Mercurial que leva você a várias opções em torno de Pruning Dead Branches .
Eu acho que a melhor opção para você é marcar o ramo antigo como "fechado". Se sua cabeça antiga for a revisão "123", então:
fonte
-C
entrarhg update
? Parece que nenhum arquivo teria sido modificado, portanto, ele deve funcionar sem ele.Primeiro de tudo, digite:
Imagine, você tem três cabeças listadas:
Digamos que você queira manter a última cabeça ativa (223) e fechar o resto.
Você faria o seguinte:
Feche a cabeça # 59
Feche a cabeça # 123
Confirme as alterações
Não se esqueça de mudar para a cabeça certa no final
E você terminou.
fonte
--close-branch -m "Closing branch - technique #2 abandoned in favor of technique #3"
.hg up -r 223
antes de fazer alterações.hg push --force
, não apenashg push
para passar pelo aviso de pressionar várias cabeças.hg push
por si só não funcionou para mim. Como você recomenda que as alterações sejam transferidas para um repositório externo se ele se recusar devido a várias cabeças?Você quer usar
hg backout
. Isso remove as alterações feitas pelo conjunto de alterações de qualquer conjunto de alterações filho.Confira isso para uma boa explicação. Recuperação mercurial
fonte
As respostas de Niall e Nick são diretas. Como me pego criando muitas cabeças pendentes, acabei escrevendo um pseudônimo para fechar cabeças mais facilmente. Adicionando isso ao seu
.hgrc
:(se você já tem uma
[alias]
seção, pode anexá-la)Agora você pode fechar uma cabeça em um único comando (e sem precisar atualizar manualmente para um conjunto de alterações diferente) assim:
Nota: o alias tira proveito do fato de que os aliases do Mercurial podem ser comandos de shell . Isso significa que provavelmente funcionará apenas no UNIX, não no Windows.
fonte
Uma alternativa para fechar ou remover o ramo indesejado seria fundi- lo de uma maneira que descarte totalmente seus efeitos, mas o deixe na história. Essa abordagem permitirá que essas alterações indesejadas se propaguem em um push - portanto, use-a apenas se esse for o efeito pretendido.
Digamos que o histórico do conjunto de alterações seja assim:
e é
5
e6
que não é mais desejado.Você consegue fazer isso:
o que criará isso:
A atualização
8
garante que você esteja trabalhando no cabeçalho desejado no histórico, que deseja manter.O
-t :local
comando instrui o hg a usar a "ferramenta" de mesclagem chamada local, que diz para ignorar as alterações do outro ramo, ou seja, aquele NÃO representado pelo estado atual da pasta de trabalho. Mais informações .Assim, as alterações indesejadas
5
e6
são preservadas na história, mas não afetam nada mais recente.fonte
Este é um caso de uso para a extensão Evolve . No momento, ele não é fornecido com o Mercurial, por isso é tecnicamente uma extensão de terceiros. Mas está sendo usado muito fortemente por várias pessoas, incluindo desenvolvedores do Mercurial, está sendo desenvolvido ativamente e não vai a lugar algum.
Com a extensão Evolve, você simplesmente
e seguir com sua vida. O cset ainda estará lá, mas obsoleto. Ele não estará visível a menos que você passe a
--hidden
opção para os comandos do Mercurial e, por padrão, não será enviado para repositórios remotos. Embora eu pense que você pode forçá-lo, se realmente quiser.Se o cset que você está removendo tiver ancestrais que você deseja manter, será necessário executar
hg evolve
para rebase desses conjuntos de alterações.hg evolve
fará isso automaticamente. Caso contrário, você não precisa fazer nada.fonte
Você pode clonar seu repositório corrompido para um novo sem clonar essa cabeça indesejada. Em seguida, remova o repositório antigo, mova o clone recém-criado para o local original e continue trabalhando com ele. Isso levará algum tempo, mas você obterá um repositório perfeitamente limpo sem um sinal dessa revisão indesejada.
fonte
Eu já tive esse problema várias vezes quando desejo decapitar uma cabeça que foi criada com erro. Eu sempre quero vê-lo desaparecer da face da Terra.
Na sua cópia local, obtenha as últimas e, em seguida:
Encontre o início de uma cabeça que deseja despir (onde um novo pescoço começa a se ramificar), obtenha o número da revisão
Tire isso.
Fonte: TipsAndTricks .
Fonte: PruningDeadBranches # Using_strip .
Seu repositório agora deve ter a cabeça despida. A última etapa é importante, pois a remoção não cria nenhuma alteração que você possa enviar ao seu repositório central. Sem o último passo, você só retirou a cabeça localmente.
fonte