¿Cómo saber en qué confirmación se agregó un código en particular?

82

Quiero saber en qué confirmación agregué el código que se proporciona a continuación:

if (getListView().getChildCount() == 0)
                getActivity().findViewById(android.R.id.empty).setVisibility(View.VISIBLE);

¿Cómo logro esto?

Harshal Kshatriya
fuente

Respuestas:

77

Ejecutar git blameen el archivo. Le mostrará el ID de confirmación, la fecha y la hora, y quién lo cometió, para cada línea. Luego, simplemente copie el identificador de confirmación y podrá usarlo en git log <commit>o git show <commit>.

Por ejemplo, tengo un archivo, llamado test.txt, con líneas agregadas en diferentes confirmaciones:

$ cat test.txt
First line.
Second line.

Ejecutando el git blame:

$ git blame test.txt
^410c3dd (Leigh 2013-11-09 12:00:00 1) First line.
2365eb7d (Leigh 2013-11-09 12:00:10 2) Second line.

El primer bit es el ID de confirmación, luego el nombre, luego la fecha, la hora, la zona horaria y finalmente el número de línea y el contenido de la línea.

Leigh
fuente
22
El problema es que esto solo muestra cuándo esos archivos se modificaron por última vez y no cuándo se agregaron.
ensonic
@ensonic Esta respuesta puede ser interesante si ese es el caso (por ejemplo, la línea se movió o un cambio de espacio en blanco): stackoverflow.com/a/5816177/812680
mcls
3
Adicional útil es grep de los resultadosgit blame test.txt | grep 'First line'
Jonathan Lockley
3
Eso no responde a la pregunta del OP. Tuvimos un problema en el que todo nuestro repositorio pasó por un cambio de "código de re-sangría", para reducir las pestañas de 4 espacios a 2. A partir de ese momento, toda culpa de git siempre revelará al tipo que volvió a sangrar el código, no al uno que lo presentó. git log -S hace el truco.
Motti Shneor
78
git log -S searchTerm

le da las confirmaciones en las que se introdujo el término de búsqueda.

Rahil Ahmad
fuente
7
Creo que esa es la mejor respuesta ya que el OP quería buscar algún código (no archivo) agregado.
dr_
Estoy de acuerdo: tuve un problema en el que todo el repositorio pasó por una sesión de "re-sangría de código", para reducir las pestañas de 4 espacios a 2. A partir de ese momento, toda la culpa de git siempre revelará al tipo que volvió a sangrar el código - no el que lo introdujo. git log -S hace el truco.
Motti Shneor
42

Hay algo más rápido que culpar al expediente completo. Si la línea es ${lineno}y el archivo es ${filename}, puede:

git blame -L ${lineno},${lineno} ${filename}

Ejemplo:

git blame -L 2,2 test.txt
cforbish
fuente
5
En realidad, esto no responde a la pregunta, a menos que esa línea de código nunca se haya cambiado. Revelará quién es el usuario que cambió por última vez estas líneas de código. No el que los presentó. git log -S, sin embargo, lo hará. Sin embargo, técnica útil ...
Motti Shneor
20
git log -S "mention here line of code" [file-path]    

Por ejemplo:

git log -S "First line" test.txt         

Proporcionar el nombre del archivo con su ruta es obvio porque, la mayoría de las veces, queremos saber quién introdujo un segmento de código en particular en un archivo en particular.

Anshul Singhal
fuente
Disculpe, no puedo entenderlo, lo que debería ponerse en la "línea de código de mención aquí". el número de línea? el contenido real de la línea? un texto para buscar? ¿Puedes ser más claro?
Motti Shneor
1
OKAY. Lo usé y me maravillé de los resultados. este UN SALVADOR DE VIDAS. De Verdad. En nuestro repositorio corporativo bastante torpe y pésimo, algún sabio decidió cambiar el espacio entre las pestañas de 4 a 2 en 1,2 millones de líneas de código. Por supuesto, a partir de ese momento, la culpa de git no tiene sentido, porque cada maldita línea ha cambiado por ese mismo desagradable compromiso de volver a sangrar las fuentes. Entonces, esto realmente me dio la cuerda que necesitaba, para encontrar quién "inventó" una línea de código, y no la última persona que lo cambió. GRACIAS. Mano grande.
Motti Shneor
Gracias por apreciar
Anshul Singhal
1
En la terminal de Linux se requerían comillas simples para la línea de código:git log -S 'some code' path/to/file.c
Daniel Holmes
¡Esto fue un salvavidas! ¡Gracias!
Saif Al Falah
0

Si el código se mantiene en el Gitrepositorio y el intellijIDE junto con el complemento Git se usa para navegar por el código, entonces he encontrado la siguiente forma muy intuitiva:

  1. Abra el archivo en intellij
  2. Vaya al menú contextual -> Git -> Anotar.
  3. Aparecerá una nueva ventana donde cada línea en la nueva ventana le dice quién hizo esa línea confirmada.

Las siguientes capturas de pantalla son para las referencias:

ingrese la descripción de la imagen aquí

Anshul Singhal
fuente