2012-07-18 8 views
126

Digamos que tengo un archivo foo.js que se cometió hace algún tiempo. Me gustaría simplemente encontrar la confirmación donde este archivo fue agregado por primera vez.Buscar confirmar donde se agregó el archivo

Después de leer las respuestas y mi propia retoques, esto funciona para mí

git log --follow --diff-filter=A --find-renames=40% foo.js 
+6

Dang, hermano. Tienes una reputación de 1 y muchas cosas buenas en tu perfil. Debes haber hecho algo de trolling para obtener votos atrasados ​​en alguna parte. –

+0

Su cuenta fue suspendida "temporalmente" durante ... varios años, parece. – msanford

Respuesta

203

Esto es más simple, "pura git" forma de hacerlo, sin tubería necesaria:

git log --diff-filter=A -- foo.js 

Verifique los documentos, puede hacer lo mismo para Eliminado, Modificado, etc.

Tengo un práctico alias para esto porque siempre olvidarlo:

git config --global alias.whatadded 'log --diff-filter=A' 

Esto hace que sea tan simple como:

git whatadded -- foo.js 
+17

+1! Sin embargo, mi archivo estaba en una subcarpeta, por lo que solo funcionó después de que agregué un asterisco en la parte frontal 'git log --diff-filter = A - * subfolder/foo.js' – Geo

+2

¿Cómo funciona esto en los archivos que se fusionan de otras ramas, pero que no se agregaron necesariamente a la rama fusionada por el usuario que realiza la fusión? – g33kz0r

13
git log --oneline -- foo.js | tail -n 1 
+1

Sería bueno tener '--follow'. –

0

La siguiente tal vez no sea de su interés, pero creo que le ayudará en el futuro y es parte de la depuración de los ecosistemas en Git:

Usted puede utilizar git-culpa para mostrar lo que la revisión y el autor modificó por última vez cada línea de un archivo de anotación especifiqly archivo, visite https://git-scm.com/book/en/v2/Git-Tools-Debugging-with-Git

ex. git culpa -L 174,190 xx.py

+0

¿Podría explicarme qué hacen cada uno de los operandos? Me doy cuenta de que ha proporcionado un enlace al rtfm pertinente, pero una pequeña elucidación haría que su publicación sea una ventanilla única. – rossmcm

+0

Como dice el libro de Pro-Git, si rastreas un error en tu código y quieres saber cuándo se introdujo y por qué, la anotación de archivos suele ser tu mejor herramienta. Te muestra qué compromiso fue el último en modificar cada línea de cualquier archivo, por lo que este ejemplo que mostré utiliza la opción -L para limitar el resultado a las líneas 174 a 190 y lo último es solo el archivo de destino que deseas verificar (xx.py) en este caso un archivo python @rossmcm – Reidel

Cuestiones relacionadas