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

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 ^.

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


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

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".


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

16

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

git diff --cached --color

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

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>

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...


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" .


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.