Respuesta corta:
git log --full-history -- your_file
le mostrará todas las confirmaciones en la historia de su repositorio, incluidas las confirmaciones de fusión, que se tocaron your_file. El último (superior) es el que eliminó el archivo.
Alguna explicación:
La --full-historybandera aquí es importante. Sin él, Git realiza una "simplificación del historial" cuando le solicita el registro de un archivo. Los documentos son ligeros sobre los detalles sobre cómo funciona esto exactamente y me falta el valor y el coraje necesarios para tratar de resolverlo a partir del código fuente, pero los documentos de git-log tienen mucho que decir:
Modo por defecto
Simplifica la historia a la historia más simple explicando el estado final del árbol. Más simple porque poda algunas ramas laterales si el resultado final es el mismo (es decir, fusionando ramas con el mismo contenido)
Esto es obviamente preocupante cuando se elimina el archivo cuyo historial queremos , ya que el historial más simple que explica el estado final de un archivo eliminado es sin historial . ¿Existe el riesgo de que git logsin --full-historysimplemente afirme que el archivo nunca fue creado? Por desgracia sí. Aquí hay una demostración:
mark@lunchbox:~/example$ git init
Initialised empty Git repository in /home/mark/example/.git/
mark@lunchbox:~/example$ touch foo && git add foo && git commit -m "Added foo"
[master (root-commit) ddff7a7] Added foo
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 foo
mark@lunchbox:~/example$ git checkout -b newbranch
Switched to a new branch 'newbranch'
mark@lunchbox:~/example$ touch bar && git add bar && git commit -m "Added bar"
[newbranch 7f9299a] Added bar
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 bar
mark@lunchbox:~/example$ git checkout master
Switched to branch 'master'
mark@lunchbox:~/example$ git rm foo && git commit -m "Deleted foo"
rm 'foo'
[master 7740344] Deleted foo
1 file changed, 0 insertions(+), 0 deletions(-)
delete mode 100644 foo
mark@lunchbox:~/example$ git checkout newbranch
Switched to branch 'newbranch'
mark@lunchbox:~/example$ git rm bar && git commit -m "Deleted bar"
rm 'bar'
[newbranch 873ed35] Deleted bar
1 file changed, 0 insertions(+), 0 deletions(-)
delete mode 100644 bar
mark@lunchbox:~/example$ git checkout master
Switched to branch 'master'
mark@lunchbox:~/example$ git merge newbranch
Already up-to-date!
Merge made by the 'recursive' strategy.
mark@lunchbox:~/example$ git log -- foo
commit 77403443a13a93073289f95a782307b1ebc21162
Author: Mark Amery
Date: Tue Jan 12 22:50:50 2016 +0000
Deleted foo
commit ddff7a78068aefb7a4d19c82e718099cf57be694
Author: Mark Amery
Date: Tue Jan 12 22:50:19 2016 +0000
Added foo
mark@lunchbox:~/example$ git log -- bar
mark@lunchbox:~/example$ git log --full-history -- foo
commit 2463e56a21e8ee529a59b63f2c6fcc9914a2b37c
Merge: 7740344 873ed35
Author: Mark Amery
Date: Tue Jan 12 22:51:36 2016 +0000
Merge branch 'newbranch'
commit 77403443a13a93073289f95a782307b1ebc21162
Author: Mark Amery
Date: Tue Jan 12 22:50:50 2016 +0000
Deleted foo
commit ddff7a78068aefb7a4d19c82e718099cf57be694
Author: Mark Amery
Date: Tue Jan 12 22:50:19 2016 +0000
Added foo
mark@lunchbox:~/example$ git log --full-history -- bar
commit 873ed352c5e0f296b26d1582b3b0b2d99e40d37c
Author: Mark Amery
Date: Tue Jan 12 22:51:29 2016 +0000
Deleted bar
commit 7f9299a80cc9114bf9f415e1e9a849f5d02f94ec
Author: Mark Amery
Date: Tue Jan 12 22:50:38 2016 +0000
Added bar
Observe cómo git log -- baren el volcado de la terminal anterior resultó literalmente sin salida; Git está "simplificando" la historia en una ficción donde barnunca existió. git log --full-history -- bar, por otro lado, nos da el commit que creó bary el commit que lo eliminó.
Para ser claros: este problema no es meramente teórico. Solo busqué en los documentos y descubrí la --full-historybandera porque me git log -- some_fileestaba fallando en un repositorio real donde estaba tratando de rastrear un archivo eliminado. Simplificar la historia a veces puede ser útil cuando usted está tratando de entender cómo una existente en la actualidad archivo llegó a estar en su estado actual, pero cuando se trata de localizar a un archivo borrado es más probable que el tornillo que sobre ocultando la de comprometerse usted se preocupa por . Utilice siempre la --full-historybandera para este caso de uso.