2011-10-11 6 views
8

En git, que puede hacer lo siguiente:¿Cuál es el equivalente de Mercurial para mostrar confirmaciones en una rama pero no en otra?

git log foo ^bar 

para mostrar los conjuntos de cambios en la rama foo pero no en la rama bar. ¿Hay alguna manera de hacer eso en Mercurial?

Editar: Para explicar un poco más el caso de uso. Supongamos que tengo una sucursal en Mercurial (llámese foo) que se deriva de default. Lo que quiero saber es qué confirmaciones están en la rama foo y, por lo tanto, no se han combinado con default. Tal vez estoy pensando en esto de la manera incorrecta, pero en git, podría comenzar a trabajar en foo, fusionarme a master y luego trabajar un poco más en foo y usar el comando de arriba para ver qué commits aún no se han fusionado.

Por lo tanto, un caso de uso específico es saber si una rama se ha completado se fusionó en el valor predeterminado. Desde el uso de Mercurial, si comienzo una rama foo fuera de default para trabajar en una función, déjala allí para fusionarla y bifurcarla de foo para crear bar, que contiene otra característica incorporada en foo, foo termina estar inactivo porque bar contiene todos los conjuntos de cambios en foo, pero es posible que desee fusionar solo los conjuntos de cambios en foo porque sé que son buenos mientras que bar aún está en desarrollo. Espero que sea útil.

+0

Así que básicamente quiere ver todos los antepasados ​​de 'foo' que no forman parte de los antepasados ​​de' default'. Eso es lo que hace la segunda mitad de mi respuesta. –

+0

Si solo desea ver las confirmaciones en una sola rama, simplemente use 'hg log -b '. Si '' es su sucursal actual, puede usar 'hg log -b .'. – weberc2

Respuesta

26

Trate de usar revsets (hg help revsets)

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

Pero esto es una especie de inútil como un conjunto de cambios sólo puede estar en una rama llamada a la vez.

¿Quizás te refieres a todos los antepasados ​​de un marcador que no son ancestro de otro marcador?

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

De cualquier forma, la página de ayuda de los recuentos debe comenzar.

+1

Gracias, revsets es lo que estaba buscando. Creo que quise decir "conjuntos de cambios" en lugar de "compromisos", así que gracias por señalar eso. – Bialecki

+0

Sí changeset es la jerga de Mercurial, cometer es Git lingo; p. Puedes usarlos de manera bastante intercambiable. –

9

¿Qué quiere decir exactamente por commits en branch foo pero no en bar? Los compromisos son fundamentalmente solo en una rama en mercurial.

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

Ver mi edición superior. Cuando dices "los commits son fundamentalmente solo en una rama en mercurial", ¿eso significa que el modelo es diferente de Git? Tengo entendido que solo hay conjuntos de cambios y que puede aplicarlos a cualquier sucursal, por lo que dos sucursales podrían tener un conjunto de cambios aplicado. – Bialecki

+0

He editado mi pregunta para que sea "conjuntos de cambios" en lugar de "confirmaciones", gracias por señalar ese error. – Bialecki

+0

@Bialecki, Mercurial tiene dos tipos de ramas, ramas nombradas y ramas anónimas. Las ramas anónimas no son más que constantes divergentes, y pueden rastrearse con marcadores (que son similares a las ramas de git).Las ramas con nombre realmente obtienen una etiqueta comprometida junto con ellas, por lo que una confirmación siempre está en una rama, ya sea 'predeterminada' u otra. –

1

para mostrar los conjuntos de cambios en la rama foo pero no en la barra de rama

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