2012-04-20 7 views
66

Suponga que su git commit historia se parece a esto:Git: ¿Cómo a la lista comete en esta rama, pero no de las ramas fusionadas

A---B---C---D---E---F master 
    \  /
     X---Y---Z topic 

¿Es posible tener lista git sólo las confirmaciones de maestro, A-F? En otras palabras, si la confirmación se realizó en una rama fusionada, no quiero que se muestre.

+1

Entonces, ¿cómo sabría git que 'D' y' Z' formaban parte de la rama fusionada? – Romain

+1

Cuando se fusionan desde el maestro, las confirmaciones maestras anteriores son las primeras en fusionarse. 'git log' permite mostrar solo esas confirmaciones con' --first-parent', para que obtenga el material correcto – CharlesB

+0

posible duplicado de [¿Cómo ejecuto Git Log para ver los cambios solo para una rama específica?] (http://stackoverflow.com/questions/4649356/how-do-i-run-git-log-to-see-changes-only-for-a-specific-branch) –

Respuesta

94

git log tiene la opción de --first-parent, por lo que no se va a topic historia.

Cuando se fusionaron desde master, los commits master son los primeros en fusionarse. El registro de Git permite mostrar solo esas confirmaciones con --primeros padres, para que pueda obtener las cosas correctas.

+15

+1 '--first-parent' lo hace :) combinado con' --no-merges' puedes ocultar la fusión confirma – c00kiemon5ter

+1

Esto funciona increíble con 'tig' https://github.com/jonas/tig –

-2

¿Esto no funciona?

git log master 
git log --stat master 
+0

No funcionan. El compromiso de fusión tiene dos padres; todo el seguimiento de ambos padres está en la rama 'maestro'. – GoZoner

16

Hay otra forma en general de hacer esto que no se basa en --first-parent que será útil en ciertas situaciones .. utilizando los filtros de exclusión rama

git log origin/topic ^origin/master Esto le dará un registro de origin/topic con todos origin/master's commits removed.

también podría agregar en --no-merges que ocultará las confusiones de fusión que puede o no desear.

Otro consejo útil es usar shortlog en lugar de log que le dará más de un resumen abbreivated que puede ser útil para las notas de la versión, o la comunicación de lo que está en una rama.

actualización
Después de volver a leer esto, en realidad se quiere que casi la inversa de lo que he publicado; sin embargo, terminaría excluyendo todo lo que está en master y foo (git log origin/master ^origin/foo). Sin embargo, también puede obtener lo que solicita (ocultar todas las confirmaciones que forman parte de las fusiones) con git log origin/master --no-merges

Cuestiones relacionadas