Como posso ver o que mudou em um arquivo antes de confirmar com o git?

351

Percebi que, enquanto trabalhava em um ou dois ingressos, se eu me afastar, não sei ao certo o que trabalhei, o que mudou, etc.

Existe uma maneira de ver as alterações feitas em um determinado arquivo antes do git add e do git commit?

Timothy T.
fonte

Respostas:

525

Você está procurando git diff. Dependendo da sua situação exata, existem três maneiras úteis de usá-lo:

# show differences between index and working tree
# that is, changes you haven't staged to commit
git diff [filename]
# show differences between current commit and index
# that is, what you're about to commit
# --staged does exactly the same thing, use what you like
git diff --cached [filename]
# show differences between current commit and working tree
git diff HEAD [filename]

Funcionará recursivamente nos diretórios e, se nenhum caminho for especificado, todas as alterações serão exibidas.

Cascabel
fonte
11
@ sveilleux2 Não, basta executar o git diff sem argumentos - como a última frase da resposta diz, se nenhum caminho for indicado, ele mostra todas as alterações. (Os colchetes [filename]indicam um argumento opcional.) Com *você deixando o shell listar todos os arquivos, se estiver em um subdiretório, você só obterá coisas nesse subdiretório (não todo o repositório) e você ' Perderá alterações nos arquivos ocultos.
Cascabel
# mostra diferenças entre a confirmação atual e o índice #, isto é, o que você está prestes a cometer git diff --cached [filename] Você não quer dizer: # mostra as diferenças entre a confirmação atual e o índice # ou seja, o que você está falando para empurrar ? git diff --cached [nome do arquivo]
ofarooq 7/17
3
Para ver as diferenças feitas depois de adicionar um arquivo (ou seja, depois de "add git"), fazer "git diff --staged [arquivo]"
Sidtharthan
Oh, por que é tão complicado ?! E se tivermos uma dúzia de arquivos? .. Apenas reclamando da interface do git ... Sim, parece, git add -pé uma alternativa para inspecionar todos os arquivos.
Kirby
@ Jeffromi - considere adicionar git diff --staged [filename]sua resposta principal, pois essa é uma situação mais frequentemente necessária.
Lazarus Thurston
39

Use git-diff:

git diff yourfile
Felix Kling
fonte
8

git diff filename

olmo
fonte
8

Para mim, git add -pé a maneira mais útil (e pretendo que os desenvolvedores do git pensem?) Revisar todas as alterações não-estágios (mostra o diff para cada arquivo), escolher um bom conjunto de alterações que devem ser acompanhadas por um commit e, em seguida, quando você tiver encenou tudo isso, use git commite repita para o próximo commit. Em seguida, você pode fazer com que cada confirmação seja um conjunto de alterações úteis ou significativas, mesmo que elas ocorram em vários arquivos. Eu também sugeriria criar uma nova ramificação para cada ticket ou atividade semelhante e alternar entre eles usando checkout(talvez usando git stashse você não deseja confirmar antes de mudar), embora se você estiver fazendo muitas alterações rápidas, isso pode ser uma dor. Não se esqueça de mesclar com frequência.

Reed Hedges
fonte
Então, em vez de git add file name, use git add -p?
Timothy T.
11
O git add -p é uma combinação de preparação, vendo as alterações que você pode preparar e selecionando-as uma a uma de maneira interativa. Consulte Confirmar apenas parte de um arquivo no Git para obter mais informações sobre o git add -p.
Angelos Asonitis
5

git diff

Mostrar alterações entre a árvore de trabalho e o índice ou uma árvore, alterações entre o índice e uma árvore, alterações entre duas árvores ou alterações entre dois arquivos no disco.

miku
fonte
A citação é um pouco demais - por padrão, ela realiza a primeira comparação: entre a árvore de trabalho e o índice.
Cascabel
4

Lembre-se, você está cometendo alterações , não arquivos.

Por esse motivo, é muito raro não usar git add -p(ou o equivalente do magit) para adicionar minhas alterações.

Dustin
fonte
2
O git NÃO lida com mudanças - tentar pensar como se fosse a principal fonte de confusão e erros. O git lida com instantâneos.
Chris Dodd
3
git diff <path>/filename

path pode ser o caminho completo do sistema até o arquivo ou,
se você estiver no projeto, cole o caminho do arquivo modificado também
para arquivos modificados com o uso de path:git status

HariKishore
fonte
2

Bem, meu caso quando você não quer se importar com a lista de arquivos. Apenas mostre a todos.

Quando você já correu git add sua lista de arquivos:

$ git diff --cached $(git diff --cached --name-only)

Nas versões mais recentes do git , você pode usar --stagedtambém, que é um sinônimo --cached.

O mesmo pode ser usado para não adicionar arquivos, mas sem --cached opção.

$ git diff $(git diff --name-only)

Alias ​​do comando Git para a opção "em cache":

$ git config --global alias.diff-cached '!git diff --cached $(git diff --cached --name-only)'
Kirby
fonte
3
Graças para os detalhes git diff --cached --name-only foi a ordem que eu estava procurando ....
Doogle
1

Vá para seu respectivo repositório git e execute o comando abaixo:

nome do arquivo diff

Ele abrirá o arquivo com as alterações marcadas, pressione a tecla Enter / Enter para rolar o arquivo para baixo.

O nome do arquivo PS deve incluir o caminho completo do arquivo, ou você pode executar sem o caminho completo, indo no respectivo diretório / pasta do arquivo

Yash Bansal
fonte
0

Você também pode usar um editor de texto compatível com o git. Eles mostram cores nas linhas que foram modificadas, outra cor para linhas adicionadas, outra cor para linhas excluídas etc.

Um bom editor de texto que faz isso é o Atom 1.0 do GitHub .

AskYous
fonte