merge - Come chiudere correttamente un ramo di funzionalità in Mercurial?




branch hg-merge (3)

Ho finito di lavorare su feature-x feature branch. Voglio unire i risultati al ramo default e chiudere feature-x per eliminarlo nell'output dei hg branches .

Ho trovato il seguente scenario, ma ha alcuni problemi:

$ hg up default
$ hg merge feature-x
$ hg ci -m merge
$ hg up feature-x
$ hg ci -m 'Closed branch feature-x' --close-branch

Quindi il ramo feature-x (changests 40 - 41 ) è chiuso, ma c'è una nuova testata , il changeset di ramo di chiusura 44 , che sarà elencato ogni volta in hg heads :

$ 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
|

Aggiornamento : Sembra che dalla versione 1.5 Mercurial non mostri più teste di rami chiusi nell'output delle hg heads .

È possibile chiudere un ramo unito senza lasciare un altro capo? C'è un modo più corretto per chiudere un ramo di funzionalità?

Domande correlate:


È strano che nessuno abbia ancora suggerito il modo più efficace per chiudere un branch di feature ... Puoi semplicemente combinare il merge commit con il flag --close-branch (ad esempio, commettere i file modificati e chiudere il ramo simultaneamente):

hg up feature-x
hg merge default
hg ci -m "Merge feature-x and close branch" --close-branch
hg branch default -f

Quindi, questo è tutto. Nessuna testa in più sul revgraph. Nessun impegno extra.


Un modo è quello di lasciare aperte le feature feature unite (e non attive):

$ 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)

Un altro modo è chiudere un ramo di funzionalità prima di unire usando un commit extra:

$ 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)

Il primo è più semplice, ma lascia un ramo aperto. Il secondo non lascia aperte teste / rami, ma richiede un altro commit ausiliario. Si può combinare l'ultimo commit effettivo al ramo della funzione con questo commit extra usando --close-branch , ma si dovrebbe sapere in anticipo quale commit sarà l'ultimo.

Aggiornamento : da Mercurial 1.5 puoi chiudere il ramo in qualsiasi momento in modo che non appaia più nelle hg heads e nelle hg heads . L'unica cosa che potrebbe infastidirti è che tecnicamente il grafico di revisione avrà ancora una revisione in più senza childen.

Aggiornamento 2 : poiché i segnalibri Mercurial 1.8 sono diventati una caratteristica fondamentale di Mercurial. I segnalibri sono più convenienti per le diramazioni rispetto ai rami nominati. Vedi anche questa domanda:


EDIT ouch, too late ... So leggere il tuo commento affermando che vuoi mantenere il changeset feature-x in giro, quindi l'approccio alla clonazione qui non funziona.

Lascerò ancora la risposta qui perché potrebbe aiutare gli altri.

Se vuoi eliminare completamente la "feature X", perché, ad esempio, non ha funzionato, puoi clonare. Questo è uno dei metodi spiegati nell'articolo e funziona, e parla specificamente delle teste.

Per quanto ne so tu hai questo e vuoi sbarazzarti della testa "caratteristica-x" una volta per tutte:

@    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

Quindi fai questo:

hg clone . ../cleanedrepo --rev 7

E avrai il seguente, e vedrai che feature-x è davvero andata:

@    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

Potrei aver frainteso ciò che volevi, ma per favore non modificarlo, ho impiegato del tempo a riprodurre il tuo caso d'uso:)







hg-merge