Como mostrar o histórico do log do git para um subdiretório de um repositório git?

228

Digamos que eu tenho um repositório Git que se parece com isso.

foo/
  .git/
  A/
   ... big tree here
  B/
   ... big tree here

Existe uma maneira de solicitar ao git log que mostre apenas as mensagens de log para um diretório específico. Por exemplo, quero ver o que confirma arquivos tocados apenas em foo / A?

ams
fonte

Respostas:

242

No diretório foo/, use

  git log -- A

Você precisa do '-' para separar <path>..os <since>..<until>refspecs.

# Show changes for src/nvfs
$ git log --oneline -- src/nvfs
d6f6b3b Changes for Mac OS X
803fcc3 Initial Commit

# Show all changes (one additional commit besides in src/nvfs).
$ git log --oneline
d6f6b3b Changes for Mac OS X
96cbb79 gitignore
803fcc3 Initial Commit
GoZoner
fonte
1
By the way, você deve ficar no foldrer "foo" antes de fazer "git log - A B"
Sergey Leyko
22
Para as pessoas skim-leitura, isso mostra mudanças no A e B , não apenas Acomo OP solicitado
Aidan
1
@GoZoner, existe uma maneira de encontrar todos os commits nos quais um nome de pasta específico foi alterado? a pasta poderia ter movido ao redor, então eu preferiria não ter que caçar como e onde a pasta movida ..
alpha_989
3
^^ Atualizado para mostrar alterações Aapenas, conforme o OP solicitado.
GoZoner 23/05/19
E se o diretório foi excluído no cabeçalho atual?
Aaron Franke
34

se você quiser vê-lo graficamente, pode usar

gitk -- foo/A

insira a descrição da imagem aqui

Reza
fonte
26

Você pode usar git logcom os nomes de caminho das respectivas pastas:

git log A B

O log mostrará apenas confirmações feitas em Ae B. Eu costumo me --statempenhar para tornar as coisas um pouco mais bonitas, o que ajuda a revisões rápidas de confirmação.

Nick Tomlin
fonte
26

Entrar

git log .

do diretório específico, também fornece confirmações nesse diretório.

Nikhil Agarwal
fonte
4
Não funcionou para mim .. Após o desembarque no diretório específico e dando o log git. me deu todos os commits da raiz.
AKS
1
Funciona para mim. Usando git bash
buckley
2

Para rastrear alterações em uma pasta para a qual a pasta foi movida, comecei a usar:

git rev-list --all --pretty=oneline -- "*/foo/subfoo/*"

Isso não é perfeito, pois pega outras pastas com o mesmo nome, mas se for exclusivo, parece funcionar.

Mafu Josh
fonte
0

As outras respostas mostram apenas os arquivos alterados.

git log -p DIRé muito útil, se você precisar do diff completo de todos os arquivos alterados em um subdiretório específico.

Exemplo: mostrar todas as alterações detalhadas em um intervalo de versão específico

git log -p 8a5fb..HEAD -- A B

commit 62ad8c5d
Author: Scott Tiger
Date:   Mon Nov 27 14:25:29 2017 +0100

    My comment

...
@@ -216,6 +216,10 @@ public class MyClass {

+  Added
-  Deleted
Matthias M
fonte
1
Eu não entendo como esta resposta se relaciona com a pergunta
Florian Leitgeb