Quiero encontrar la confirmación más reciente que modificó un archivo fuente.
Puedo usar git blame
para ver todas las fechas de las confirmaciones por línea, pero es difícil ver exactamente qué confirmación fue la última en tocar el archivo.
¿Cómo puedo encontrar la última confirmación que tocó un archivo determinado en mi repositorio git?
--all
opción.Si solo desea encontrar la confirmación más reciente, entonces no desea
git-log
, deseagit-rev-list
, que enumera los objetos de confirmación que cambian ese archivo, en esa ruta de confirmación, comenzando con el más reciente (cronológicamente). Simplemente pon:git rev-list -1 <commit> <filename>
Porque
git-rev-list
en su caso, solo suministra:Esto solo devuelve la ID de confirmación más reciente en la rama actual para alterar ese archivo, por ejemplo:
215095e2e338525be0baeeebdf66bfbb304e7270
Para un ejemplo más complejo, puede usar nombres de etiquetas e incluso referencias remotas e incluir nombres de ruta relativos con comodines, por ejemplo:
git rev-list origin/user/bob/testbranch -1 src/bfiles/*.txt
... Lo que te diría cuál fue el cambio más reciente en la coincidencia de comodines en la historia de esa rama. Las opciones para la lista de revoluciones son extremas, es uno de los comandos de plomería más importantes, por lo que puede incluir o excluir cualquier criterio que pueda imaginar.
Por supuesto, consulte la página del manual git-rev-list (1) .
fuente
git-log
es inferior.git-log
Es de porcelana,git-rev-list
es de fontanería.Si desea obtener el hash de la última confirmación para modificar un conjunto específico de archivos (y desea evitar
awk
), puede usar:Esto puede ser útil para obtener el hash de confirmación para usarlo posteriormente con
git describe
.Por ejemplo (en caso de que sea útil para alguien) ...
Creo una identificación de versión actual considerando la última confirmación para cambiar cualquier archivo fuente (suponiendo que marque versiones con etiquetas como
mycode-1.2.1
):Esto produce identificadores como:
mycode-1.2.1
- cuando el estado actual de los archivos de origen corresponde a una versión etiquetadamycode-1.2.1-g3k7s2
- cuando el estado actual de los archivos de origen corresponde a la confirmación después de una versión etiquetadamycode-1.2.1-g3k7s2-mod
- cuando se ha modificado el estado actual de los archivos fuente desde la última confirmación después de una versión etiquetadamycode-unknown
- cuando aún no se ha creado una etiqueta de versiónfuente
$VN
parece una especie de pesadilla SVN muertos vivientesNo estoy seguro de si esto es lo que quieres, pero si haces una
git log <thefile>
para obtener las confirmaciones que alteraron ese archivo. Puedes elegir el más alto. Debería ser el que estás buscando.fuente
git log -n1 -- <thefile>
(o canaliza la salida ahead -1
si desea desperdiciar recursos) no tiene que elegir manualmente la línea superior (vea la respuesta de Jo Liss )-n
y usar-1
directamente.Para obtener solo la referencia en una línea, intente:
fuente
Una vez que tenga la identificación SHA de la confirmación que desea ver usando
git log FILENAME
, debería poder hacergit show SHA_ID_HERE
lo que hizo para esa confirmación en particular. Ni siquiera necesita ingresar la identificación completa; Los primeros 6 caracteres deberían ser suficientes.fuente
git show $(git log -1 --pretty="%H" -- FILENAME)