¿Cómo puedo get lo que es la revisión del file en Git?

¿Hay alguna forma de get la revisión (es decir, confirmar el hash) del file en Git?

Sé de git log -- <file_path> , pero eso me da todos los commits (o el último si hago git log -1 -- <file_path> ), pero eso no es lo que quiero. Vamos a tener FILE con commits A, B, C, D, E donde E es HEAD ahora voy a hacer algo como esto

 git checkout C -- FILE 

Ahora, si hago el git status , me muestra que el ARCHIVO se ha modificado y necesita ser confirmado, lo que no quiero hacer. (Tengo un visor de historial simple en mi aplicación y necesito marcar la revisión del file después del pago).

¿Hay alguna manera de hacer que Git me muestre la revisión actual (en este caso, confirmar C)?

SVN puede hacer esto mediante svn info <file_name> , pero SVN no es Git y funciona de manera diferente.

Editar:

en SVN:

 svn info FILE // gives me revision E svn update -r C svn info File // gives me revision C 

EDIT2: ejemplo del mundo real:

 $ git log --pretty=format:"%H ... %h ... %s" -- MySQL\ 5_5.txp 131b81c2a203c564c01b4fffa98b7395ebb75bc2 ... 131b81c ... modified MYSql5.5 2640738310efa21f119cdcb252cc5069aade27bd ... 2640738 ... Changed Entity 2 position bbe9b2474b3f0127da0271b4db74712c201c2c03 ... bbe9b24 ... Changed Entity 3 position c40c5f74599515d95b17641a58c2864a34b20f06 ... c40c5f7 ... from popup ac46fa7d4d93e91183a033ce8fffcf93d9f0505d ... ac46fa7 ... from toolbar 248824ec7f4fda13ca28358d7b50a810b2d247f9 ... 248824e ... sdsada 20103e2c1798cee2816eb78967cdb6443bd1f9bf ... 20103e2 ... mysql e222f54962b9b12745b0c1904b70f1ee9c657d2e ... e222f54 ... ssss fd8f3b34a86851f54cf2951cb4d3077e4ffa16ba ... fd8f3b3 ... ssss c979f4cba91564333fa81e62dce328c23c38b739 ... c979f4c ... ccccccccccc 9a5a8e08c016a27b7d818c8e6828dd5dd578a00c ... 9a5a8e0 ... divny commit 61c8146060d1db337888d7bca83db1bacb441158 ... 61c8146 ... edwdewd d495e292bb917fe730143af5b40c612a6937eaea ... d495e29 ... wqewqe 459d7938df6273bc4b8a4f3aa6a41e0d318a291d ... 459d793 ... wqwewqe 6f993b23ec79350c57f75375e3640d5079d8b873 ... 6f993b2 ... aaaaaaaa 7c9e43cda6ce44d4e614a42637b3334de4813059 ... 7c9e43c ... ddwedwe ea419227ad22058625aadd08aa7e9227063568ee ... ea41922 ... edwd 2c08393f0696d443ab5ad8b75d74093d59caf76f ... 2c08393 ... mysql $ git checkout e222f54 MySQL\ 5_5.txp $ git rev-parse HEAD:MySQL\ 5_5.txp ba5ee499030a097fbc20eeddde003820d58a5754 

Esperaría algo como:

 $ git <some command> [options] MySQL\ 5_5.txp 

para devolver e222f54 o fulhash e222f54962b9b12745b0c1904b70f1ee9c657d2e

Este script de shell debería funcionar, simplemente pase el nombre del file como argumento:

 #!/bin/sh blob=`git hash-object $1` git log --format=format:%H --follow $1 | while read commit; do if git ls-tree -r $commit | grep -q $blob; then echo $commit; break; fi done 
  1. git hash-object $1 calcula hash para el file actualmente desprotegido $1
  2. git log --format=format:%H --follow $1 hash de lists de git log --format=format:%H --follow $1 para todas las confirmaciones que introdujeron cualquier cambio en el file $1
  3. git ls-tree -r $commit | grep -q $blob; encuentra qué compromiso del paso 2 tiene un file $1 con el mismo hash calculado en el paso 1

Para ver el contenido de FILE en commit C sin verificarlo:

 git show C:FILE # you can networkingirect the output to a file on your disk : git show C:FILE > /tmp/FILE 

Si desea ver la diferencia entre las versiones C y HEAD de FILE :

 git diff C -- FILE # you can ask git to open a graphical diff viewer : git difftool C -- FILE