2010-06-09 19 views
11

Al hacer un git tag, no siempre soy bueno recordando si HEAD ~ 6 (por ejemplo) es inclusivo o exclusivo.¿Hay alguna forma de obtener el SHA de una confirmación a partir de su mensaje?

Dado que a la mayoría de mis confirmaciones se les agrega un número de problema, me pregunté si hay algún comando mágico para buscar el SHA de confirmación de parte de su mensaje.

sé que es fácil de hacer un git log y trabajar desde allí, pero quiero más fácil :)

EDITAR: Alguien también hizo la pregunta opuesta: In Git, is there a way to get the “friendly” name for an arbitrary commit?

Respuesta

17

Puede utilizar :/blah sintaxis para especificar una confirmación cuya comprometerse mensaje comienza con el texto dado.

E.g.

git show ":/Issue #299" 

Esto es válido en cualquier lugar donde se pueda usar una confirmación. P.ej.

git cherry-pick ":/Issue #299" 

Si realmente necesita el SHA-1 de la confirmación, puede usar rev-parse.

git rev-parse ":/Issue #299" 

Véase el "SPECIFYING REVISIONS" section of the git rev-parse man page:

dos puntos, seguido de una barra, seguido de un texto:
Esto da nombre a una confirmación cuya comprometerse mensaje comienza con el texto especificado.
Este nombre devuelve el compromiso de coincidencia más joven al que se puede acceder desde cualquier referencia.
Si el mensaje de confirmación comienza con un !, tiene que repetir eso; la secuencia especial :/!, seguida de algo más que ! está reservada por ahora.

+0

¿Qué sucede si el texto no es único? – Benjol

+0

@Benjol: IIRC, encuentra el compromiso alcanzable más joven; deberá verificar la documentación. –

+0

Gracias, cualquier idea de una palabra clave para buscar eso ': /' no funciona demasiado bien ... – Benjol

1

Trate

git rev-list --grep='message excerpt' HEAD 

Esto solo mostrará los commits que son ancestros de HEAD. Si desea buscar todas las confirmaciones en el repositorio (incluidas las que no son ancestros de HEAD), no estoy seguro de cómo hacerlo, sino de examinar manualmente todos los encabezados de las ramas y ejecutar este comando. (Probablemente hay una manera, simplemente no sé lo que podría ser)

8
git log --grep=word 

debería ayudar a encontrar la confirmación pertinente.
(en contraposición a la búsqueda de commit contents, donde git log -S (opción pico) o git grep son más apropiados)

Añadir diversas opciones de formato como

git log --grep=word --pretty=oneline 
git log --grep=word --pretty=format:"%h" 

(el último mostrando sólo el SHA1), y tú eres bueno para irte.


Véase también "Fun with git log --grep"

git log --grep=frotz --grep=nitfol --since=1.month 

Esta encuentran las confirmaciones que sucedieron en el último mes y mencionan bien Frotz o nitfol en sus mensajes de registro en las confirmaciones.
Al igual que con el "git grep" habitual, dar más de un patrón significa "esto o aquello".

El artículo señala que git grep se orienta la línea, y utilice la opción --all-partido en este comando git log --grep.

La forma en que la familia "git log" usa el mecanismo grep es exactamente para esto "¿todo tiene una coincidencia?" aspecto, no el aspecto "muéstrame las líneas que coinciden con estos criterios". Se permite el uso de este mecanismo, así:

Esto demostrará que mencionan compromete Frotz y escrito por Linus.

+0

Estaba buscando algo que pudiera canalizar/usar directamente en otro comando, así que si agrega '--pretty = format:"% h "' a eso, lo marcaré como la respuesta;) – Benjol

+0

Agregar --pretty = online al comando debería mejorar aún más la legibilidad. – Unknown

+0

@Benjol: opciones de formato agregadas. – VonC

Cuestiones relacionadas