2011-10-11 5 views
8

In git, posso effettuare le seguenti operazioni:Qual è l'equivalente Mercurial per la visualizzazione di commit in un ramo ma non in un altro?

git log foo ^bar 

per mostrare di modifiche nel ramo foo ma non nel ramo bar. C'è un modo per farlo in Mercurial?

Modifica: Per spiegare un po 'di più il caso d'uso. Supponiamo che abbia una filiale in Mercurial (chiamiamola foo) che è derivata da default. Quello che voglio sapere è ciò che si impegna nel ramo foo e quindi non sono stati uniti a default. Forse sto pensando a questo nel modo sbagliato, ma in git, potrei iniziare a lavorare su foo, unire a master e poi lavorare ancora su foo e usare il comando sopra per vedere quali commit non erano ancora stati uniti.

Quindi, un caso d'uso specifico è sapere se un ramo è stato completato fusa in default. Dall'utilizzo di Mercurial, se si avvia un ramo per lavorare su una funzione, lasciarlo quindi essere unito e derivato da foo per creare bar, che contiene un'altra funzione creata sopra a foo, foo finisce essere inattivo perché bar contiene tutti i changeset in foo, ma potrei voler unire solo i changeset in foo perché so che quelli sono buoni mentre bar è ancora in sviluppo. Speriamo che sia utile.

+0

Così che, fondamentalmente, desidera vedere tutti gli antenati di 'foo' che non fanno parte degli antenati di' default'. È proprio quello che fa la seconda parte della mia risposta. –

+0

Se si desidera visualizzare solo i commit in un ramo, utilizzare 'hg log -b '. Se '' è il tuo ramo corrente, puoi usare 'hg log -b .'. – weberc2

risposta

26

Prova utilizzando revsets (hg help revsets)

hg log -r "branch(foo) and not branch(bar)" 

Ma questa è una specie di inutile come un insieme di modifiche può essere solo in un ramo di nome alla volta.

Forse intendi tutti gli antenati di un segnalibro che non sono l'antenato di un altro segnalibro?

hg log -r "::a and not ::b" 

In entrambi i casi, la pagina di aiuto di revsets dovrebbe iniziare.

+1

Grazie, revsets è quello che stavo cercando. Penso che volevo dire "changeset" invece di "commit", quindi grazie per averlo sottolineato. – Bialecki

+0

Sì, il changeset è Mercurial lingo, commit è Git lingo; p. Puoi usarli praticamente in modo intercambiabile. –

9

Che cosa intendi esattamente commettendo nel ramo foo ma non nel bar? I commit sono fondamentalmente solo in una branca in mercurial.

hg log -b foo #lists all commits that are in branch foo 
+0

Vedere la mia modifica sopra. Quando dici "il commit è fondamentalmente solo in un ramo in mercurial" significa che il modello è diverso da Git? La mia comprensione è che ci sono solo changeset e puoi applicarli a qualsiasi branch, quindi a due rami potrebbe essere applicato un changeset. – Bialecki

+0

Ho modificato la mia domanda come "changeset" anziché "commit", grazie per aver segnalato questo errore. – Bialecki

+0

@Bialecki, Mercurial ha due tipi di rami, rami denominati e rami anonimi. I rami anonimi non sono altro che commit divergenti e possono essere tracciati con i segnalibri (che sono simili ai rami di git).I rami denominati ricevono effettivamente un'etichetta impegnata insieme a loro, quindi un commit è sempre su un ramo, "predefinito" o altro. –

1

per mostrare di modifiche nella foo ramo, ma non nel bar ramo

hg log -r "::foo and not ::bar and ! destination(branch(bar)) and ! origin(branch(bar))" 
Problemi correlati