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?

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.


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



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.


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.


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.


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


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)'

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


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 .

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.