2010-12-28 24 views
8

Tengo dos confirmaciones, una de las cuales es el antecesor de otra. (Resulta que son los puntos de inicio y fin de una sucursal. No creo que eso importe, pero lo incluiré si lo hace).Mostrar las diferencias sin combinar para dos confirmaciones en git

Quiero ver la diferencia entre las dos confirmaciones, pero excluyendo cambios realizados durante las asignaciones de fusión (es decir, todas las confirmaciones con más de un elemento primario) que se realizaron entre las dos confirmaciones. (Básicamente, deseo cualquier confirmación "real" que se haya realizado en la sucursal, excluyendo las fusiones).

¿Esto es posible? Si es así, ¿cómo lo logras?

Si es necesario, suponga que no hay conflictos resueltos durante las asignaciones de fusión ... pero puntos de bonificación para una solución que pueda manejarlos elegantemente.

+0

Por favor, aclare: ¿quiere una diferencia individual para cada confirmación que no es una fusión comprometida, o espera algo más? –

+0

@Autocracy: lo he editado y espero aclarar lo que estoy buscando. Avísame si todavía no tiene sentido. –

Respuesta

7

Su pregunta es un poco ambigua pero creo que usted quiere esto.

git log --no-merges -p branch-start..branch-end 
+0

También podría preferir '--first-parent' en su lugar. –

+1

-p es el ticket, cuando se combina con --no-merges. ¡Gracias! –

+0

Es una pena que no puedas hacer esto (crear un rango) contra la memoria caché/actual (no confirmada) ... puedes obtener la diferencia completa con 'git diff $ (git merge-base branchA currentbranch)'. ¡Estar mohíno! –

2

no sabía las --no-fusiona -o opciones, pero aquí otra solución (supongo que se funde se han hecho desde el maestro):

git checkout -b temp 
git rebase --onto master branch-start branch-end 
git diff master 
2

Si sus fusiones todos ellos procedentes de la misma rama (digamos master) o están todas contenidas en otra rama, puede usar el solution desde this question.

suponiendo que tiene un árbol como la siguiente:

  x---y-+-z-+-branch 
     / //
---a---b---c-+-d-+-e---master 

y los dos confirmaciones que le gustaría comparar está b y branch. A continuación, en lugar de comparar las dos confirmaciones directamente, corriendo

git diff master...branch 

mostrará todos los cambios realizados en la rama (x,y,z) con exclusión de todo lo que está también en master (c,d,e, las fusiones). Tenga en cuenta que esto también ignora los cambios realizados en el maestro que aún no están en la rama.

A partir de los documentos:

git diff [--options] cometen ... comprometerse [-] [...]

Esta forma es para ver los cambios en la rama que contiene y hasta el segundo compromiso, comenzando en un ancestro común de ambas confirmaciones . "git diff A ... B" es equivalente a "git diff $ (git-merge-base A B) B".

Cuestiones relacionadas