Eu terminei de trabalhar em um ramo de recursos feature-x
. Quero mesclar os resultados de volta ao default
ramo e fechar feature-x
para me livrar dele na saída de hg branches
.
Eu vim com o seguinte cenário, mas ele tem alguns problemas:
$ hg up default
$ hg merge feature-x
$ hg ci -m merge
$ hg up feature-x
$ hg ci -m 'Closed branch feature-x' --close-branch
Portanto, o feature-x
ramo (changests 40
- 41
) é fechado, mas há um novo cabeçalho , o conjunto de alterações do ramo de fechamento 44
, que será listado hg heads
sempre:
$ hg log ...
o 44 Closed branch feature-x
|
| @ 43 merge
|/|
| o 42 Changeset C
| |
o | 41 Changeset 2
| |
o | 40 Changeset 1
|/
o 39 Changeset B
|
o 38 Changeset A
|
Atualização : Parece que, desde a versão 1.5, o Mercurial não mostra mais cabeças de galhos fechados na saída de hg heads
.
É possível fechar um ramo mesclado sem deixar mais uma cabeça? Existe uma maneira mais correta de fechar uma ramificação de recurso?
Perguntas relacionadas:
default
sem "fechá-los". Isso resultou em 0 novas cabeças, mas essas ramificações ficaram visíveis parahg branches
sempre (como ramificações inativas).Respostas:
Uma maneira é deixar as ramificações de recursos mesclados abertas (e inativas):
Outra maneira é fechar uma ramificação de recurso antes de mesclar usando uma confirmação extra:
O primeiro é mais simples, mas deixa um ramo aberto. O segundo não deixa cabeças / ramos abertos, mas requer mais um commit auxiliar. É possível combinar o último commit real no ramo do recurso com esse commit extra
--close-branch
, mas deve-se saber antecipadamente qual o commit será o último.Atualização : Desde Mercurial 1.5 pode fechar a filial em qualquer momento, por isso não vai aparecer em ambos
hg branches
ehg heads
mais. A única coisa que pode incomodá-lo é que tecnicamente o gráfico de revisão ainda terá mais uma revisão sem filhos.Atualização 2 : Desde os favoritos do Mercurial 1.8 se tornaram um recurso principal do Mercurial. Os marcadores são mais convenientes para ramificação do que as ramificações nomeadas. Veja também esta pergunta:
fonte
Bookmarks are more convenient for branching than named branches
. Os marcadores Hg não são a mesma coisa que os ramos Git. Eles estão cheios de muitos casos extremos que os tornam inadequados como ramificações de recursos. Por exemplo: ao clonar um repositório, você terminará com a confirmação mais recente nadefault
ramificação. Se você usar indicadores, este conjunto de alterações corresponderá a um indicador aleatório (instável). Se você usar ramificações nomeadas, obterá a confirmação mais recente na ramificação estável / padrão, que geralmente é o que você deseja. Os marcadores chegarão lá um dia, mas ainda não estão lá.abort: push creates new remote branches:
. O que eu poderia ter feito de errado?imho existem dois casos de galhos que se esqueceram de fechar
Caso 1: a ramificação não foi mesclada com o padrão
neste caso, atualizo para o ramo e faço outro commit com --close-branch, infelizmente isso elege o ramo para se tornar a nova dica e, portanto, antes de enviá-lo para outros clones, certifico-me de que a dica real receba mais algumas alterações e outras não se confunda com essa dica estranha.
Caso 2: a ramificação foi mesclada com o padrão
Esse caso não é muito diferente do caso 1 e pode ser resolvido reproduzindo as etapas do caso 1 e mais duas.
Nesse caso, atualizo para o conjunto de alterações da filial, faça outra confirmação com --close-branch e mescle o novo conjunto de alterações que se tornou a dica padrão. a última operação cria uma nova dica que está na ramificação padrão - HOORAY!
Espero que isso ajude futuros leitores.
fonte
hg help ci
o explicará.EDIT ai, tarde demais ... Eu sei que li o seu comentário afirmando que você deseja manter o feature-x changeset por perto, para que a abordagem de clonagem aqui não funcione.
Ainda vou deixar a resposta aqui, pois isso pode ajudar outras pessoas.
Se você quiser se livrar completamente do "recurso X", porque, por exemplo, ele não funcionou, você pode clonar. Esse é um dos métodos explicados no artigo e funciona, e fala especificamente sobre cabeças.
Tanto quanto eu entendo, você tem isso e quer se livrar da cabeça "feature-x" de uma vez por todas:
Então você faz isso:
E você terá o seguinte e verá que o recurso x se foi:
Posso ter entendido mal o que você queria, mas, por favor, não modifique, demorei a reproduzir o seu caso de uso :)
fonte
É estranho que ninguém ainda tenha sugerido a maneira mais robusta de fechar uma ramificação de recursos ... Você pode combinar a consolidação de mesclagem com a flag --close-branch (ou seja, confirmar arquivos modificados e fechar a ramificação simultaneamente):
Então é só isso. Ninguém mais gosta de revgraph. Sem confirmação extra.
fonte
merge
comando, pode ser uma boa ideia usarhg branch
para verificar se o nome da ramificação da mesclagem é o que você deseja manter aberto.