Como fechar corretamente uma ramo de funcionalidade no Mercurial?
Pergunta
Eu terminei trabalhando em um feature-x
recurso ramo. Quero resultados da mesclagem voltar ao ramo default
e perto feature-x
, a fim de se livrar dele na saída do hg branches
.
Eu vim com o seguinte cenário, mas 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
Assim, o ramo feature-x
(changests 40
-41
) está fechado, mas há um novo chefe , o conjunto de alterações 44
ramo de encerramento, que serão listados no hg heads
cada vez:
$ 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
|
Atualizar :. Parece que desde a versão 1.5 Mercurial não mostra chefes de agências fechadas na saída do hg heads
mais
É possível fechar um ramo mesclada sem sair de mais uma cabeça? Existe maneira mais correta para fechar um ramo de funcionalidade?
Perguntas relacionadas:
Solução
Uma maneira é deixar apenas fundiu ramos recurso aberto (e inativos):
$ hg up default
$ hg merge feature-x
$ hg ci -m merge
$ hg heads
(1 head)
$ hg branches
default 43:...
feature-x 41:...
(2 branches)
$ hg branches -a
default 43:...
(1 branch)
Outra maneira é fechar um ramo de recurso antes de se fundir com um extra de cometer:
$ hg up feature-x
$ hg ci -m 'Closed branch feature-x' --close-branch
$ hg up default
$ hg merge feature-x
$ hg ci -m merge
$ hg heads
(1 head)
$ hg branches
default 43:...
(1 branch)
O primeiro é mais simples, mas deixa um ramo aberto. O segundo não deixa aberta cabeças / ramos, mas requer mais um auxiliar cometer. Pode-se combinar o último real comprometer com o ramo de funcionalidade com este extra de commit utilizando --close-branch
, mas deve-se saber com antecedência quais cometer será a última.
Atualizar : Desde Mercurial 1.5 pode fechar a filial em qualquer momento, por isso não vai aparecer em ambos hg branches
e hg heads
mais. A única coisa que poderia irritá-lo é que, tecnicamente, o gráfico de revisões ainda terá mais uma revisão sem childen.
Update 2 : Desde Mercurial 1.8 marcadores se tornaram uma característica central do Mercurial. Marcadores são mais conveniente para ramificação de ramos nomeados. Veja também esta pergunta:
Outras dicas
imho há dois casos para ramos que foram esqueceu de fechar
Caso 1: ramo não foi incorporada padrão
nesta atualização caso eu para o ramo e fazer outra comprometer com --close-ramo, infelizmente este elege o ramo para se tornar a nova ponta e, portanto, antes de empurrá-lo para outros clones I certifique-se de que a ponta verdadeiro recebe um pouco mais mudanças e outros não ficar confuso sobre essa dica estranha.
hg up myBranch
hg commit --close-branch
Caso 2: ramo foi incorporada padrão
Este caso não é muito diferente de caso 1 e pode ser resolvido por reproduzir os passos para o caso 1 e dois outros adicionais.
Neste I atualização caso para o conjunto de alterações ramo, fazer outra comprometer com --close-ramo e mesclar o novo changeset que se tornou a ponta em default. a última operação cria uma nova dica que está no ramo padrão - HOORAY
hg up myBranch
hg commit --close-branch
hg up default
hg merge myBranch
Espero que isso ajude futuros leitores.
Editar ouch, tarde demais ... Eu sei ler o seu comentário afirmando que pretende manter o longa-x de alterações ao redor, então a abordagem de clonagem aqui não funciona.
Eu ainda vou deixar a resposta aqui para que possa ajudar os outros.
Se você quiser se livrar completamente do "recurso X", porque, por exemplo, não funcionou, você pode clonar. Este é um dos o método explicado no artigo e ele faz o trabalho, e ele fala especificamente sobre as cabeças.
Tanto quanto eu entendo que você tem isso e quer se livrar da cabeça "característica-x" uma vez por todas:
@ changeset: 7:00a7f69c8335
|\ tag: tip
| | parent: 4:31b6f976956b
| | parent: 2:0a834fa43688
| | summary: merge
| |
| | o changeset: 5:013a3e954cfd
| |/ summary: Closed branch feature-x
| |
| o changeset: 4:31b6f976956b
| | summary: Changeset2
| |
| o changeset: 3:5cb34be9e777
| | parent: 1:1cc843e7f4b5
| | summary: Changeset 1
| |
o | changeset: 2:0a834fa43688
|/ summary: Changeset C
|
o changeset: 1:1cc843e7f4b5
| summary: Changeset B
|
o changeset: 0:a9afb25eaede
summary: Changeset A
Assim que você fizer isso:
hg clone . ../cleanedrepo --rev 7
E você vai ter o seguinte, e você verá que o recurso-x é realmente ido:
@ changeset: 5:00a7f69c8335
|\ tag: tip
| | parent: 4:31b6f976956b
| | parent: 2:0a834fa43688
| | summary: merge
| |
| o changeset: 4:31b6f976956b
| | summary: Changeset2
| |
| o changeset: 3:5cb34be9e777
| | parent: 1:1cc843e7f4b5
| | summary: Changeset 1
| |
o | changeset: 2:0a834fa43688
|/ summary: Changeset C
|
o changeset: 1:1cc843e7f4b5
| summary: Changeset B
|
o changeset: 0:a9afb25eaede
summary: Changeset A
Talvez eu tenha entendido mal o que você queria, mas por favor, não mod para baixo, eu levei tempo reproduzindo seu caso de uso:)
É estranho, que ninguém ainda sugeriu a maneira mais robusta de fechar uma característica ramos ... Você pode apenas combinar merge comprometer com a bandeira --close-branch (ou seja, enviar arquivos modificados e perto do ramo simultaneamente):
hg up feature-x
hg merge default
hg ci -m "Merge feature-x and close branch" --close-branch
hg branch default -f
Então, isso é tudo. Ninguém cabeça extra em revgraph. No extra cometer.