Veja as alterações em um arquivo específico usando o git

472

Eu sei que posso usar o git diffcomando para verificar as alterações, mas, tanto quanto eu entendi, é baseado em diretório. Isso significa que ele fornece todas as alterações de todos os arquivos no diretório atual.

Como posso verificar apenas as alterações em um arquivo específico? Digamos, eu alterei os arquivos file_1.rb, file_2.rb... file_N.rb, mas estou interessado apenas nas alterações no arquivo file_2.rb. Como verifico essas alterações (antes de confirmar)?

Mellon
fonte
1
possível duplicata de Como visualizar o histórico de arquivos no Git?
charlesb
4
Minha principal pergunta é como verificar a diferença para um arquivo específico antes de confirmar todas as alterações. O log do Git é para alterações confirmadas, eu acho.
Mellon
1
Na minha experiência, é melhor usar uma ferramenta visual como o GitKraken
Giovanni Benussi

Respostas:

642

Use um comando como:

git diff file_2.rb

Consulte a git diffdocumentação para obter informações completas sobre os tipos de coisas pelas quais você pode obter diferenças.

Normalmente, git diffpor si só mostra todas as alterações em todo o repositório (não apenas no diretório atual).

Greg Hewgill
fonte
100
Se você quiser ver as mudanças de um arquivo que você já "git add" 'ed, é 'git diff --cached'
Ana Betts
8
Se você quiser verificar um arquivo contra um mais velho cometer: $ git diff [commit de hash] file_2.rb
Alex Angelico
2
Como sair da exibição diff?
Garry
1
Ou use o SourceTree.
GeneCode 27/10/16
4
@GurpreetsinghDhanju Tente pressionar Q #
110

Outro método (mencionado nesta resposta do SO ) manterá o histórico no terminal e fornecerá um histórico muito profundo do próprio arquivo:

git log --follow -p -- file

Isso mostrará todo o histórico do arquivo (incluindo o histórico além das renomeações e com diferenças para cada alteração).

Em outras palavras, se o arquivo chamado bar já foi nomeado foo, o git log -p bar (sem a opção --follow) mostrará apenas o histórico do arquivo até o ponto em que foi renomeado - não exibirá o histórico do arquivo quando era conhecido como foo. O uso do git log --follow -p bar mostrará todo o histórico do arquivo, incluindo quaisquer alterações no arquivo quando ele era conhecido como foo.

AJ Zane
fonte
3
Funciona bem com --stat para ter uma visão geral das linhas adicionadas / excluídas.
Tom Hale
2
Sim, essa resposta deve ter uma classificação pelo menos maior, rastrear o histórico, não apenas o diff atual, nem você precisa acompanhar todos os hashes de confirmação. Uso muito simples, mas muito poderosa em mudanças
Ilhicas
87

Você pode usar gitk [filename]para ver o log de alterações

da Rocha Pires
fonte
2
Isso mostraria o histórico das confirmações no arquivo, que às vezes pode ser o que você precisa.
R1k0
26

Você pode usar o comando abaixo para ver quem mudou o que em um arquivo.

git blame <filename>

Vineet
fonte
4
Esta é a melhor resposta, pois indica quem fez que alteração e quando e de qual confirmação a alteração fez parte. Para filtro para uma mudança específica, basta fazer git blame <filename> | grep <searchfor>onde <searchfor>está a uma curta valor. Por exemplo, para descobrir o que mudou foopara barno dist/index.php, você usariagit blame dist/index.php | grep bar
Kraang Primeiro-
15

Você pode executar

git status -s

Isso mostrará o nome dos arquivos modificados e, ao copiar o caminho do arquivo interessado, você poderá ver as alterações usando git diff

git diff <filepath + filename>
Tejas Pawar
fonte
8

para listar apenas confirma detalhes de alterações específicas no arquivo,

git log --follow file_1.rb

para listar a diferença entre várias confirmações para o mesmo arquivo,

git log -p file_1.rb

para listar apenas commit e sua mensagem,

git log --follow --oneline file_1.rb
Mohideen bin Mohammed
fonte
5

você também pode tentar

git show <filename>

Para confirmações, o git show mostrará a mensagem de registro e a diferença de texto (entre o seu arquivo e a versão confirmada do arquivo).

Você pode conferir a documentação do git show para mais informações.

LuisBento
fonte
0

Concordo totalmente com @Greg Hewgill

E se o caminho incluir espaços, você pode usar, tente adicionar com apóstrofo 'ou `

git diff 'MyProject / Minha pasta / Minha subpasta / file_2.rb'

MrMins
fonte