Git: ¿Cómo encontrar compromisos con Change-Id dado?

Gerrit agrega automáticamente una línea Change-Id: I.... en el post de confirmación para cada nueva confirmación. Cuando una confirmación se selecciona en múltiples twigs, esta línea se conserva en su post.

¿Hay alguna forma de:

  1. encontrar todas las confirmaciones con Change-Id dado
  2. encontrar la confirmación en una twig específica con Change-Id dado
  3. especifique la confirmación con Change-Id dado (en una twig específica) como parámetro de revisión (por ejemplo, git cherry-pick {[dev-branch::]Change-Id: Ixxxx}..master )

EDITAR: Después de publicar esta respuesta, @ lz96 sugirió esto:

 git --no-pager log --format=format:%H -1 --grep "Change-Id: $1" 

¡Definitivamente es la manera más limpia!


Aquí está mi respuesta original:

No puedo pensar en una forma clara de cómo hacerlo en un solo paso, así que aquí hay dos:

 git log --grep "Change-Id: <id>" 

Esto le mostrará todas las confirmaciones que tienen este parámetro Change-Id . Paso 1b: Ora, es solo uno.

Paso 2: git cherry-pick <sha> .


Aquí está mi feo one-stepper:

 git cherry-pick $(git log --grep "Change-Id: <id>" | head -n 1 | cut -d ' ' -f 2) 

Probablemente puedas convertir esto en una function para ocultar toda esa complejidad:

 function changepick() { git cherry-pick $(git log --grep "Change-Id: $1" | head -n 1 | cut -d ' ' -f 2) } 

Eso también le da la ventaja de no tener que insert el Change-Id mitad de una línea.