2011-05-05 12 views
13

Me gustaría ver todas las confirmaciones de git que afectaron las líneas actualmente x - y en uno de mis archivos. ¿Hay alguna manera de que pueda hacer eso?git log para una porción de un archivo

+0

¿Por qué quieres hacer eso? –

+2

Tengo un código que no tiene ningún sentido. Quiero ver cómo terminó en su estado actual. Hubo una gran cantidad de compromisos con este archivo y la mayoría de ellos no tocan las líneas en cuestión. No quiero ver los 500 commits para encontrar los 4 que importan. – JonDrnek

+0

Esta es una pregunta interesante, y yo mismo la iba a preguntar, pero me di cuenta de que no hay una forma sensata de definir "línea" en el contexto. En el contexto de la exploración/edición de archivos, una línea se define por su número de línea. Pero tan pronto como un archivo tiene n líneas añadidas, entonces cada línea posterior se convierte en la línea x + n, y su registro está fuera de control. Puede haber una manera inteligente de seguir líneas a través de la historia, pero sería bastante intensivo computacionalmente, creo. – naught101

Respuesta

11

Ahora git log soporta la opción -L como git blame. Esto fue agregado en Git v1.8.4.

-L <start>,<end>:<file> 
-L :<regex>:<file> 

Trace the evolution of the line range given by "<start>,<end>" (or 
the funcname regex <regex>) within the <file>. You may not give any 
pathspec limiters. This is currently limited to a walk starting from a 
single revision, i.e., you may only give zero or one positive revision 
arguments. You can specify this option more than once. 

(git-log documentation)

0

Realmente no es la respuesta a su pregunta, pero puede usar git blame <file> y preguntarle a la persona que escribió las líneas que le molestan.

5

Puede utilizar git blame con la opción -L:

-L <start>,<end> 

Annotate only the given line range. <start> and <end> can take one of these forms: 

number 

If <start> or <end> is a number, it specifies an absolute line number (lines count from 1). 

/regex/ 

This form will use the first line matching the given POSIX regex. If <end> is a regex, it will search starting at the line given by <start>. 

+offset or -offset 

This is only valid for <end> and will specify a number of lines before or after the line given by <start>. 

por lo que será algo parecido a continuación:

git blame -L 40,60 foobar 

Tenga en cuenta que la culpa git muestra la última revisión para cada línea. También puede probar con la opción --reverse:

--reverse

historia Walk adelante en lugar de hacia atrás . En lugar de mostrar la revisión en la que apareció una línea, muestra la última revisión en la que ha existido una línea. Esto requiere un rango de revisión de como START..END donde existe la ruta a la culpa en START.

http://www.kernel.org/pub/software/scm/git/docs/git-blame.html

probablemente Puede utilizar también

gitk foobar 
+2

Esto solo muestra el cambio. Creo que estamos buscando algo como git-log pero para un cierto rango de línea. –

Cuestiones relacionadas