Resposta curta:
git log --full-history -- your_file
mostrará a você todos os commit no histórico de seu repo, incluindo os commit de mesclagem que foram tocados your_file. O último (superior) é o que excluiu o arquivo.
Alguma explicação:
A --full-historybandeira aqui é importante. Sem ele, o Git executa a "simplificação do histórico" quando você solicita o log de um arquivo. Os documentos são detalhados sobre exatamente como isso funciona e eu não tenho a coragem e a coragem necessárias para tentar descobrir isso a partir do código-fonte, mas os documentos do git-log têm muito a dizer:
Modo padrão
Simplifica o histórico para o mais simples, explicando o estado final da árvore. Mais simples porque remove algumas ramificações laterais se o resultado final for o mesmo (ou seja, mesclar ramificações com o mesmo conteúdo)
Isso é obviamente preocupante quando o arquivo cujo histórico queremos é excluído , pois o histórico mais simples que explica o estado final de um arquivo excluído não é histórico . Existe o risco de que, git logsem --full-history, simplesmente afirme que o arquivo nunca foi criado? Infelizmente sim. Aqui está uma demonstração:
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 como git log -- barno despejo terminal acima resultou literalmente em nenhuma saída; O Git está "simplificando" a história em uma ficção onde barnunca existiu. git log --full-history -- bar, por outro lado, nos fornece o commit que criou bare o commit que o excluiu.
Para ser claro: esta questão não é meramente teórica. Eu só procurei nos documentos e descobri o --full-historysinalizador porque git log -- some_fileestava falhando para mim em um repositório real, onde estava tentando rastrear um arquivo excluído. Às vezes, a simplificação do histórico pode ser útil quando você está tentando entender como um arquivo existente existe no estado atual, mas ao tentar rastrear uma exclusão de arquivo , é mais provável que você estrague tudo ocultando a confirmação com a qual você se preocupa. . Sempre use o --full-historysinalizador para este caso de uso.