Como visualizar o arquivo diff no git antes de confirmar

443

Isso geralmente acontece comigo:

Estou trabalhando em algumas alterações relacionadas ao mesmo tempo ao longo de um dia ou dois e, quando é hora de confirmar, acabo esquecendo o que mudou em um arquivo específico. (Este é apenas um repositório pessoal do git, por isso estou bem em ter mais de uma atualização em um commit.)

Existe alguma maneira de visualizar as alterações entre o meu arquivo local, que está prestes a ser verificado, e a última confirmação desse arquivo?

Algo como:

git diff --changed /myfile.txt

E seria impresso algo como:

line 23
  (last commit): var = 2+2
  (current):     var = myfunction() + 2

line 149
  (last commit): return var
  (current):     return var / 7

Dessa forma, pude ver rapidamente o que havia feito naquele arquivo desde a última verificação.

Molho McBoss
fonte

Respostas:

732

Se você quiser ver o que você ainda não git addeditou:

git diff myfile.txt

ou se você quiser ver as alterações já adicionadas

git diff --cached myfile.txt
Âmbar
fonte
20
confira git add -p. Revise todas as alterações, aprove seletivamente as alterações para o estágio, aborte a qualquer momento, se você mudar de idéia, e até mesmo edite um pedaço em linha. Eu nunca git addsem ele.
Kyle Baker #
2
como você pode sair do arquivo?
Kick Buttowski #
3
@Kick Tente pressionarq
wjandrea
Além disso, se você deseja remover os prefixos bobo 'a /' e 'b /' no resultado diff, pode definir git config --global diff.noprefix true.
L19
64
git diff HEAD file

mostrará as alterações que você adicionou à sua árvore de trabalho desde a última confirmação. Todas as alterações (em etapas ou não em etapas) serão mostradas.

ouah
fonte
1
Sua solução funciona. Mas estou um pouco confuso. HEAD aponta para o número de confirmação mais recente. Portanto, quando adicionamos o git, o índice do diretório ativo é atualizado e não o HEAD. Então, como isso mostra a diferença.
Mav55
17

Para verificar diferenças locais:

git diff myfile.txt

ou você pode usar uma ferramenta diff (caso deseje reverter algumas alterações):

git difftool myfile.txt

Para usar com git difftoolmais eficiência, instale e use sua ferramenta GUI favorita, como Meld, DiffMerge ou OpenDiff.

Nota: Você também pode usar .(em vez do nome do arquivo) para ver as alterações atuais do diretório.

Para verificar as alterações de cada linha, use: git blamewhat que exibirá qual linha foi confirmada em qual confirmação.


Para visualizar o arquivo real antes da confirmação (onde masterestá sua ramificação), execute:

git show master:path/my_file
kenorb
fonte
15

Você tentou -v(ou --verbose) a opção git commit? Ele adiciona o diff da confirmação no editor de mensagens.

vhallac
fonte
Boa resposta. Isso pode fornecer informações no editor de confirmação, me faz confirmar mais facilmente. Existe alguma maneira de fechar a área de informações Changes not staged for commit:que possa tornar o editor de confirmação mais limpo.
Radian Jheng 16/10
15

Outra técnica a considerar se você deseja comparar um arquivo com o último commit, que é mais pedante:

git diff master myfile.txt

A vantagem dessa técnica é que você também pode comparar com o penúltimo commit com:

git diff master^ myfile.txt

e o antes disso:

git diff master^^ myfile.txt

Também é possível substituir '~' pelo caractere de interpolação '^' e 'you branch name' por 'master' se você não estiver na ramificação principal.

anisbet
fonte
14

Eu acho que este é o caso de uso perfeito que justifica uma GUI. - Embora eu entenda totalmente que isso também pode ser alcançado dentro da linha de comando.

Pessoalmente, todo commit meu, eu faço do git-gui. No qual eu posso fazer vários commits atômicos com pedaços / linhas separados, se fizer sentido.

Gut Gui permite visualizar as diferenças em uma interface colorida bem formatada, é bastante leve. Parece que isso é algo que você deve fazer o checkout também.

Lakshman Prasad
fonte
Eu concordo - ele também permite que você edite a mensagem de confirmação enquanto observa o diff.
François
É bom saber, mas gostaria de manter a CLI. Eu usei alguns pacotes que o possuíam, mas mudei para o terminal / vim estritamente para o meu fluxo de trabalho. Obrigado embora.
Sauce McBoss
Sim, se você se ater à GUI, existem muitos recursos interessantes como git bisectesse que não são realmente acessíveis.
NoBugs
2
Concordo - Existem muitas opções para as quais é muito mais rápido e faz mais sentido usar a linha de comando. No entanto, a visualização de alterações não é uma delas.
VitalyB
Também existem interfaces de usuário de texto, que são executadas no terminal. Vale a pena conferir é a tig"interface de modo de texto para o Git".
Smid 17/10/19
10

No macOS, acesse o diretório raiz do git e digite git diff *

catanore
fonte
Sim, acabei de testar. Você tem o git instalado? Alguma mensagem de erro? Talvez uma nova pergunta possa ser feita sobre isso.
catanore 28/09/18
4

A melhor maneira que encontrei, além de usar uma GUI de confirmação dedicada, é usar git difftool -d- Isso abre sua ferramenta diff no modo de comparação de diretório, comparando HEAD com a pasta suja atual.

VitalyB
fonte
exatamente o que eu precisava. Obrigado
Ivan Ferrer Villa
3
git difftool -d HEAD filename.txt

Isso mostra uma comparação usando a janela de fenda VI no terminal.

Tomachi
fonte