Averigua qué commit está actualmente verificado en Git

157

Estoy en medio de una git bisectsesión.

¿Cuál es el comando para averiguar en qué commit (SHA1 hash) estoy actualmente? git statusno proporciona esto

Editar: supongo que llamar git logy mirar a la primera entrada funciona.

Steven Lu
fuente

Respuestas:

173

Tiene al menos 5 formas diferentes de ver la confirmación que actualmente ha verificado en su copia de trabajo durante una git bisectsesión ( tenga en cuenta que las opciones 1-4 también funcionarán cuando no esté haciendo una bisección ):

  1. git show.
  2. git log -1.
  3. Aviso de golpe.
  4. git status.
  5. git bisect visualize.

Explicaré cada opción en detalle a continuación.

Opción 1: git show

Como se explica en esta respuesta a la pregunta general de cómo determinar qué confirmación ha desprotegido actualmente (no solo durante git bisect), puede usar git showla -sopción para suprimir la salida del parche:

$ git show --oneline -s
a9874fd Merge branch 'epic-feature'

Opción 2: git log -1

También puede simplemente hacer git log -1para averiguar en qué compromiso se encuentra actualmente.

$ git log -1 --oneline
c1abcde Add feature-003

Opción 3: aviso de Bash

En Git versión 1.8.3+ (¿o era una versión anterior?), Si tiene configurado su indicador Bash para mostrar la rama actual que ha extraído en su copia de trabajo, también le mostrará la confirmación actual que ha verificado fuera durante una sesión bisecta o cuando estás en un estado de "CABEZA separada". En el siguiente ejemplo, actualmente he c1abcdeverificado:

# Prompt during a bisect
user ~ (c1abcde...)|BISECTING $

# Prompt at detached HEAD state 
user ~ (c1abcde...) $

Opción 4: estado de git

También a partir de la versión 1.8.3+ de Git (y posiblemente antes, nuevamente no estoy seguro), la ejecución git statustambién le mostrará qué confirmación ha verificado durante una bisección y cuando está en estado HEAD separado:

$ git status
# HEAD detached at c1abcde <== RIGHT HERE

Opción 5: visualización de git bisect

Finalmente, mientras está haciendo un git bisect, también puede simplemente usar git bisect visualizeo su alias incorporado git bisect viewpara iniciar gitk, de modo que pueda ver gráficamente en qué compromiso está, así como qué compromisos ha marcado como malos y buenos hasta ahora. Estoy bastante seguro de que esto existía mucho antes de la versión 1.8.3, pero no estoy seguro de en qué versión se introdujo:

git bisect visualize 
git bisect view # shorter, means same thing

ingrese la descripción de la imagen aquí

Comunidad
fuente
Ordenado. Cuando hice la pregunta, no estaba en Git 1.8, y desde entonces obtuve un zsh right-prompt que muestra el hash de confirmación, creo que incluso podría mostrar un indicador especial específicamente para si estoy bisecando, pero no tengo En realidad, no hice más bisecciones desde el momento en que hice esta pregunta, principalmente git log -p -S <search>hace el trabajo.
Steven Lu
git statusno le muestra la identificación de confirmación a menos que esté en estado desconectado. de lo contrario dice "En rama lo que sea ". git showfunciona
Kip
88

Solo puedes hacer:

git rev-parse HEAD

Para explicar un poco más: git rev-parsees el comando básico de git para interpretar cualquiera de las formas exóticas en las que puede especificar el nombre de una confirmación y HEADes una referencia a su confirmación o rama actual. (En una git bisectsesión, apunta directamente a un commit ("HEAD separado") en lugar de una rama).

Alternativamente (y más fácil de recordar) sería simplemente hacer:

git show

... que por defecto muestra el commit al que HEADapunta. Para una versión más concisa, puede hacer:

$ git show --oneline -s
c0235b7 Autorotate uploaded images based on EXIF orientation
Mark Longair
fuente
3
Si desea obtener el hash para usarlo en otro lugar, git rev-parse HEADno requiere procesamiento en comparación con todas las alternativas de basura.
Nick T
17
$ git rev-parse HEAD
273cf91b4057366a560b9ddcee8fe58d4c21e6cb

Actualizar:

Alternativamente (si tiene etiquetas):

(Bueno para nombrar una versión, no muy bueno para pasar de nuevo a git).

$ git describe
v0.1.49-localhost-ag-1-g273cf91

O (como sugirió Mark, enumerando aquí para completar):

$ git show --oneline -s
c0235b7 Autorrota imágenes cargadas según la orientación EXIF
Alexander Gladysh
fuente
77
Solicitó un SHA1, no algo que sea fácil de recordar. ;-)
Alexander Gladysh
Esta versión es muy útil si desea hacer alguna verificación en un script
Daniele Licitra
13

Si desea extraer una simple información, puede usarla git showcon la --format=<string>opción ... y pedirle que no le proporcione la diferencia --no-patch. Esto significa que puede obtener una salida de estilo printf de lo que desee, que a menudo puede ser un solo campo.

Por ejemplo, para obtener solo el hash acortado ( %h), podría decir:

$ git show --format="%h" --no-patch
4b703eb

Si está buscando guardar eso en una variable de entorno en bash (algo que probablemente la gente quiera hacer) puede usar la $()sintaxis :

$ GIT_COMMIT="$(git show --format="%h" --no-patch)"

$ echo $GIT_COMMIT
4b703eb

La listagit show --help completa de lo que puede hacer está en . Pero aquí hay una lista abreviada de propiedades que pueden ser útiles:

  • %H cometer hash
  • %h hash de confirmación abreviado
  • %T hash del árbol
  • %t hash abreviado del árbol
  • %P hashes de los padres
  • %p hashes primarios abreviados
  • %an nombre del autor
  • %ae correo electrónico del autor
  • %at fecha de autor, marca de tiempo UNIX
  • %aI fecha de autor, estricto formato ISO 8601
  • %cn nombre del confirmador
  • %ce correo electrónico de confirmación
  • %ct fecha de confirmación, marca de tiempo UNIX
  • %cI fecha de confirmación, estricto formato ISO 8601
  • %s tema
  • %f línea de asunto desinfectada, adecuada para un nombre de archivo
  • %gD selector de reflog, por ejemplo, refs / stash @ {1}
  • %gd selector de reflog acortado, por ejemplo, stash @ {1}
HostileFork dice que no confíes en SE
fuente
Todas esas opciones de formato, pero showno tiene nada para rama .
bvj
2

Use git show, que también le muestra el mensaje de confirmación, y el valor predeterminado es la confirmación actual cuando no se le dan argumentos.

asmeurer
fuente