2011-01-19 16 views
26

Suponiendo que he un foo rama llamada con dos compromete a, b:Cómo mostrar el diff específicos de una rama llamada en mercurial

 a  b  c 
------o-------o-------o------- # default 
     \   d   e 
     ----------o---------o # branch foo 

Quiero ver el diff entre A y E (un no incluido) Por supuesto, podría usar el ID de revisión, pero eso no es muy práctico. En git, uno puede hacer git diff master..foo. ¿Cómo puedo hacer lo mismo en hg?

Respuesta

33

Puede hacerlo usando revsets.

En el ejemplo específico Creo que se podría obtener una lista de apenas de d y e usando:

hg log -r "branch('foo') - branch('default')" 

en que - se define como:

"x - y" 
     Changesets in x but not in y. 

Conseguir el diff de una a e podría hacerse como:

hg diff -r "ancestor(default, foo)" -r foo 

aunque posiblemente hay una forma abreviada de eso que no estoy viendo.

+0

Gracias, esto por lo menos darle una forma de hacerlo automáticamente. Pero estoy un poco desconcertado por la rama del predicado (foo). hg log -r "branch (foo)" hace lo que yo quiero, bug hg diff -r "branch (foo)" no. Sabes por qué ? –

+1

porque solo filtra todos los conjuntos de cambios por ese predicado. "branch (foo)" devolvería (d, e) que es relativamente insignificante en este contexto. – Ringding

+2

La sintaxis correcta parece ser: 'hg log -r" branch ('foo') - branch (predeterminado) "' –

12

Otra manera de hacer esto, útil también para las ramas que ya se han fusionado por defecto es:

hg diff -r "max(ancestors(foo) and branch(default)):foo" 

A pesar de que puede ser un pozo de dolor, así que recomiendo la creación de un alias añadiendo algo como:

[alias] 
branchdiff = diff -r "max(ancestors('$1') and branch(default)):'$1'" 

Para su Mercurial.INI/hgrc que luego se puede utilizar como esto:

hg branchdiff <branch name> 

o

hg branchdiff . 
+0

Este código es increíble. – n0nag0n

+0

Sería genial ver cómo exactamente HG logra el resultado deseado con este revset '" max (ancestros (foo) y bifurcación (predeterminado)): foo "'. – szalski

1

Si desea registros de la rama actual sólo:

hg -b registro.

0

diff entre las ramas:

hg diff -r <branchname_1>:<branchname_2>

show de última rama actual se comprometen:

hg log -r .

Cuestiones relacionadas