Encontrando diferenças entre a versão atual e a última

670

Usando o Git, como você pode encontrar a diferença entre a versão atual e a última?

git diff last version:HEAD
Rajeev
fonte
1
Se você usa o GitHub para a localização na nuvem do seu repositório, é muito simples: navegue até o seu projeto e clique no cabeçalho "confirma" na tabela que exibe o seu projeto
David Lundquist
1
O significado de "versão atual e a última versão" realmente deve ser esclarecido na pergunta.
Faintsignal

Respostas:

1170

Eu realmente não entendo o significado de "última versão".

Como o commit anterior pode ser acessado com HEAD ^, acho que você está procurando algo como:

git diff HEAD^ HEAD

A partir do Git 1.8.5, @é um alias para HEAD, então você pode usar:

git diff @~..@

O seguinte também funcionará:

git show

Se você quiser saber a diferença entre head e qualquer commit, você pode usar:

git diff commit_id HEAD

E isso iniciará sua ferramenta visual diff (se configurada):

git difftool HEAD^ HEAD

Como a comparação com o HEAD é o padrão, você pode omiti-lo (como apontado pelo Orient ):

git diff @^
git diff HEAD^
git diff commit_id

Advertências

  • @ScottF e @Panzercrisis explicam nos comentários que no Windows o ~caractere deve ser usado em vez de ^.
Francisco Puga
fonte
Eu queria algo como a versão comprometido e versão antes que ... git diff cabeça cabeça-1
Rajeev
7
A partir do Git 1.8.5, @é um alias para HEAD. E desde ~e ^são os mesmos quando só vai um commit para trás, acho git diff @~..@muito mais fácil de digitar.
Andrew
80
@ Andrew git showé ainda mais fácil, já que @~..@é a coisa padrão a ser mostrada.
amalloy
3
git showapenas imprime a mensagem de confirmação, ela não gera uma diferença das alterações específicas, pelo menos no Git 2.5.4 (Apple Git-61), portanto, na verdade, não seria uma resposta à pergunta do OP.
user1944491
1
O problema git showé que, se HEADfor um commit de mesclagem, você não obterá o que espera, pois o próprio commit de mesclagem pode não ter nenhuma alteração. git diff HEAD^ HEADvai mostrar as mudanças reais entre as versões
RubenLaguna
157

Supondo que "versão atual" seja o diretório ativo (modificações não confirmadas) e "última versão" seja HEAD(últimas modificações confirmadas para a ramificação atual), basta

git diff HEAD

O crédito para o seguinte vai para o usuário Cerran.

E se você sempre pular a área de preparação com -aa confirmação, poderá simplesmente usá-lo git diff.

Sumário

  1. git diff mostra alterações sem etapas.
  2. git diff --cached mostra alterações faseadas.
  3. git diff HEAD mostra todas as alterações (em etapas e em etapas).

Fonte: Página de manual do git-diff (1) - Cerran

CharlesB
fonte
16
E se você sempre pular a área de preparação com -aa confirmação, poderá simplesmente usá-lo git diff. <1> git diffmostra alterações sem etapas . <2> git diff --cachedmostra alterações faseadas . <3> git diff HEADmostra todas as alterações (em etapas e em etapas). Fonte: git-diff (1) Página do manual
Cerran
1
Essa deve ser a resposta aceita, pois responde à intenção da pergunta.
tgoneil 19/09/19
Qual é o nome da "versão atual não preparada" no git? Existe realmente um nome?
Mathieu CAROFF
118

Como apontado em um comentário de amalloy , se por "versões atual e última" você quer dizer o último commit e o commit antes disso, você pode simplesmente usar

git show
Nighto
fonte
5
Era isso que eu estava procurando. Ótima resposta.
CodeManiak 19/01
12
Use git show HEAD~1para mostrar o último, mas um commit e git show HEAD~2etc. para confirmações mais antigas. Mostrar apenas um único arquivo via git show HEAD~2 my_file.
Florian Brucker
60

Diferença entre o último mas um commit e o último commit (mais o estado atual, se houver):

git diff HEAD~

ou mesmo (mais fácil de digitar)

git diff @~

onde @é o sinonimo HEADda ramificação atual e ~significa "me dê o pai da revisão mencionada".

Tomilov Anatoliy
fonte
Eu gosto bastante git diff HEAD^(e não a HEAD~forma equivalente ). É um pouco mais fácil de lembrar para um "git velho" como eu ;-)
sxc731
3
A cenoura é um problema em alguns terminais. É bom ter a opção
light24bulbs
1
A resposta pode ser melhorada, explicando o que isso significa ~e @.
Bob Stein
1
Se quisermos apenas verificar o que foi confirmado no último commit, não use isso (pois alterações sujas afetam o diff). Uma sintaxe mais curta que realmente diff HEAD^ HEADdeveria ser git diff @^!. Veja git-scm.com/docs/gitrevisions parar1^!
Johnny Wong
@JohnnyWong Obrigado pelo esclarecimento. Mencionei "estado atual" para não confundir os leitores.
Tomilov Anatoliy 27/02
53

Você também pode fazer o seguinte:

Compare com o commit anterior

git diff --name-status HEAD~1..HEAD

Compare com os dois commits atuais e anteriores

git diff --name-status HEAD~2..HEAD
naoko
fonte
16

Basta usar a cachedbandeira se você adicionou, mas ainda não confirmou:

git diff --cached --color
Andy
fonte
1
Era exatamente isso que eu procurava quando encontrei essa pergunta. Obrigado!
William Rogers
7

Rápido e simples, supondo que você seja o mestre:

    git diff (checkout_id):file.txt file.txt

Exemplo:

    git diff asdfioei91819280din198:file.txt file.txt
Bryan
fonte
4

Primeiro, use "git log " para listar os logs do repositório.

Agora, selecione os dois IDs de confirmação, pertencentes às duas confirmações. Você deseja ver as diferenças ( exemplo - Confirmação mais frequente e mais antiga (conforme sua expectativa da versão atual e de alguma versão antiga) ).

Em seguida, use:

git diff <commit_id1> <commit_id2>

ou

git difftool <commit_id1> <commit_id2>
parasita
fonte
3

Se o commit principal é apontado pelo HEAD, você pode fazer algo assim:

commit1 -> HEAD
commit2 -> HEAD~1
commit3 -> HEAD~2

Diferença entre o primeiro e o segundo commit:

git diff HEAD~1 HEAD

Diferença entre o primeiro e o terceiro commit:

git diff HEAD~2 HEAD

Diferença entre o segundo e o terceiro commit:

git diff HEAD~2 HEAD~1

E assim por diante...

bit_cracker007
fonte
2

Eu uso o Bitbucket com o Eclipse IDE com o Eclipse EGit in instalado.

Eu comparo um arquivo de qualquer versão de seu histórico (como SVN ).

Menu Explorador de projetos → Arquivo → clique com o botão direito do mouse em → EquipeMostrar no histórico .

Isso trará o histórico de todas as alterações nesse arquivo. Agora Ctrlclique e selecione quaisquer duas versões → "Compare umas com as outras" .

Mandrágora
fonte