2011-01-07 10 views
24

estoy usando Git para mi proyecto y tratar de seguir las mejores prácticas:Muestra sólo la historia de una rama en un Git ingrese

  1. Yo trabajo en una rama tema
  2. Cuando esté listo, puedo combinar el rama de tema en mi dev rama usando git merge --squash. Esto mantiene mi dev branch clean.
  3. Cada vez que el dev rama es estable y el equipo decide que es hora de un comunicado, que fusionan la dev se ramifican en la maestro rama, sin usando calabaza, y la etiqueta que se cometen como entregas.

Esto debe mantener nuestra historia, y el uso de gitk, podemos ver donde todas las confirmaciones vienen en. Sin embargo, quiero ser capaz de ver sólo las confirmaciones aplicadas al maestro rama. He tratado:

git log master 
git show-branch 

Ninguno de estos muestran simplemente la historia del maestro rama. ¿Hay alguna manera de hacer esto fácilmente?

+0

¿No puedes 'git checkout' para 'masterizar' la sucursal y hacer un 'git log'? – yasouser

Respuesta

21

Si le entiendo correctamente, quiere ver las fusiones de nuevo en el maestro, pero no el historial de esas fusiones. Creo que:

git log --merges 

le dará lo que quiere.

ACTUALIZACIÓN: Agregar --primer padre debe solucionar esto por los sonidos de la misma.

git log --merges --first-parent 

--first-matriz

Follow only the first parent commit upon seeing a merge commit. 

Esta opción puede dar una mejor visión de conjunto cuando se observa la evolución de una determinada rama tema, porque se funde en una rama tema tienden a ser solo sobre el ajuste actualizado upstream de vez en cuando, y esta opción le permite ignorar el confirmaciones individuales introducidas t o su historial de mediante dicha fusión.

+1

Casi, pero desafortunadamente esto también me muestra las fusiones que ocurrieron en la rama * dev *. Solo quiero ver las fusiones de * dev * en * master * –

+1

primer padre no es necesariamente donde la rama ha estado antes, se determina durante la fusión (la rama en la que ocurrió la fusión). Si avanza rápidamente hacia una fusión, el primer padre es la otra rama. – steabert

3

Dado que Git no almacena información acerca de qué rama es naciente de cuál otra, no hay una manera automática de adivinar qué rama es posible que desee que se muestre.

En este sentido, --first-parent no ayudará en última instancia, especialmente porque es fácil tener más de un maestro, por ejemplo. Consideremos:

wc1$ git clone git://shared.com/repo 
wc1$ (hack code, git commit) 
wc2$ git clone git://shared.com/repo 
wc2$ (hack code, git commit, git push somewhere) 
wc1$ git fetch origin; git merge origin/master; git push somewhere master; 

(. Siéntase libre de tomar un proyecto de azar y hacer este ejercicio) representarla gráficamente.Por lo tanto, no se puede graficar de forma significativa "solo una rama", incluso si las confirmaciones se etiquetaron con el nombre de la rama en la que se crearon (porque ambas son maestras).

+1

Supongamos que, en situaciones como esta, en las que se llamaban varias ramas 'maestra', quería verlas todas. (De hecho, cuando he querido algo similar a la pregunta original aquí, eso es lo que siempre he deseado, ha habido múltiples historias y he deseado verlas todas). Así que la respuesta a "cuál una rama que posiblemente podría querer "serían" todas ellas "- no hay necesidad de resolverla en solo una. –

8

Desafortunadamente, Git no almacena la información de la sucursal para una confirmación, y confirma que no pertenece a una sucursal. Las ramas en Git son simplemente "etiquetas móviles" en un curso de commits y NO una secuencia de commits como uno esperaría.

Así que, básicamente, no puede mostrar las confirmaciones que pertenecen a una sucursal, ya que no existe tal concepto en Git.

Cuestiones relacionadas