¿Es posible ver quién editó una línea específica antes de la confirmación informada por git blame
, como un historial de confirmaciones para una línea determinada?
Por ejemplo, ejecuto lo siguiente (en el excelente uncrustify
proyecto):
$ git blame -L10,+1 src/options.cpp
^fe25b6d (Ben Gardner 2009-10-17 13:13:55 -0500 10) #include "prototypes.h"
¿Cómo puedo averiguar quién editó esa línea antes de confirmar fe25b6d
? ¿Y quién lo editó antes de ese compromiso?
-w
opción También hay-M
para el código movido / copiadoRespuestas:
Puede especificar una revisión para git blame para mirar hacia atrás a partir de (en lugar del valor predeterminado de
HEAD
);fe25b6d^
es el padre defe25b6d
.fuente
--
se usa comúnmente como un separador en los argumentos de la línea de comandos; en el caso de Git, generalmente se usa para separar cosas como los hash de confirmación de una lista de nombres de archivos.Puede usar git log -L para ver la evolución de un rango de líneas.
Por ejemplo :
significa "rastrear la evolución de las líneas 15 a 23 en el archivo llamado filename.txt".
fuente
La respuesta de Amber es correcta pero no me pareció clara; La sintaxis es:
Nota:
--
se utiliza para separar el árbol-ish sha1 de las rutas de archivos relativas. 1Por ejemplo:
¡Crédito completo a Amber por saber todas las cosas! :)
fuente
Es posible que desee ver:
Le ofrece una buena visualización gráfica de los cambios, como "culpa git", pero con enlaces en los que se puede hacer clic por línea, para pasar a confirmaciones anteriores. Pase el mouse sobre los enlaces para obtener una ventana emergente con detalles de confirmación. No mis créditos ... lo encontré aquí:
http://zsoltfabok.com/blog/2012/02/git-blame-line-history/
git gui
es una interfaz gráfica Tcl / Tc para git. Sin ningún otro parámetro, inicia una aplicación gráfica bastante simple pero útil para confirmar archivos, trozos o incluso líneas simples y otros comandos similares como enmendar, revertir, empujar ... Es parte del conjunto de aplicaciones git. En Windows está incluido en el instalador. En debian, no sé sobre otros sistemas * nix, debe instalarse por separado:De los documentos:
https://git-scm.com/docs/git-gui
fuente
this
: pero ¿cómo veo la versión anterior de la línea y cuándo se agregó?Sobre la base de la respuesta anterior, este bash one-liner debería darte lo que estás buscando. Muestra el historial de culpa de git para una línea particular de un archivo particular, a través de las últimas 5 revisiones:
En la salida de este comando, es posible que vea el contenido del cambio de línea, o el número de línea que se muestra puede incluso cambiar, para una confirmación particular.
Esto a menudo indica que la línea se agregó por primera vez, después de esa confirmación en particular. También podría indicar que la línea se movió desde otra parte del archivo.
fuente
También hay
recursive-blame
. Se puede instalar confuente
Una solución muy única para este problema es usar git log:
Como explica Andre aquí
fuente
git config --global alias.changes 'log -p -M --follow --stat --'
git changes path/to/your/file
Si está utilizando IDB de Idea de JetBrains (y derivados), puede seleccionar varias líneas, hacer clic derecho para el menú contextual, luego Git -> Mostrar historial para selección. Verá una lista de confirmaciones que estaban afectando a las líneas seleccionadas:
fuente
A partir de Git 2.23 puedes usar git blame --ignore-rev
Para el ejemplo dado en la pregunta, esto sería:
(Sin embargo, es una pregunta capciosa porque ¡fe25b6d es la primera revisión del archivo!)
fuente
Basándose en la respuesta de Will Shepard, su salida incluirá líneas duplicadas para confirmaciones donde no hubo cambios, por lo que puede filtrarlas de la siguiente manera (usando esta respuesta )
Tenga en cuenta que eliminé el argumento REVS y esto vuelve a la confirmación de raíz. Esto se debe a la observación anterior de Max Nanasy.
fuente
Basándome en la respuesta de DavidN y quiero seguir el archivo renombrado:
ref: muestra bien el historial de cambio de nombre de archivo en git log
fuente
Utilizo este pequeño script bash para ver un historial de culpa.
Primer parámetro: archivo a mirar
Parámetros posteriores: pasados a culpar a git
Puede proporcionar parámetros de culpa como -L 70, + 10 pero es mejor usar la búsqueda de expresiones regulares de culpa git porque los números de línea generalmente "cambian" con el tiempo.
fuente
Construir sobre stangls 's respuesta , puse este script en mi camino (incluso en Windows) como git-BH:
Eso me permite buscar todas las confirmaciones en las que estaba involucrada una palabra:
Guión:
fuente