Português (Brasil) ▾ Topics ▾ Latest version ▾ git-diff-index last updated in 2.48.0

NOME

git-diff-index - Compara uma árvore com a árvore ou índice de trabalho

RESUMO

git diff-index [-m] [--cached] [--merge-base] [<opções-comuns-ao-diff>] <árvore> [<caminho>…​]

DESCRIÇÃO

Compare o conteúdo e o modo das bolhas encontradss num objeto árvore com os arquivos rastreados correspondentes na árvore de trabalho ou com os caminhos correspondentes no índice. Quando os argumentos <caminho> estiverem presentes, compare apenas os caminhos que correspondem a estes padrões. Caso contrário, todos os arquivos serão comparados.

OPÇÕES

Warning

Missing pt_BR/diff-options.adoc

See original version for this content.

<tree-ish>

A identificação de um objeto de árvore com a qual fazer o "diff".

--cached

Não considere de forma alguma o arquivo no disco.

--merge-base

Em vez de fazer a comparação direta de <tree-ish> , use a base mesclada entre <tree-ish> e HEAD. O <tree-ish> deve ser um commit.

-m

É predefinido que os arquivos registrados no índice, mas sem verificação, serão relatados como excluídos. Esta opção faz com que o comando git diff-index diga que todos os arquivos não verificados estão atualizados.

Warning

Missing pt_BR/diff-format.adoc

See original version for this content.

MODOS DE OPERAÇÃO

Você pode escolher se deseja confiar totalmente no arquivo no índice (usando o a opção --cached) ou solicitar que a lógica do diff mostre todos os arquivos que não correspondam ao estado de estatísticas como sendo "provisoriamente alterados". Ambas as operações são realmente úteis.

MODO EM CACHE

Caso --cached seja utilizado, será permitido que você pergunte:

mostre-me as diferenças atuais entre o HEAD e o índice
teor (os que eu escreveria utilizando 'git write-tree')

Digamos que você trabalhou no seu diretório de trabalho por exemplo e atualizou alguns arquivos no índice e está pronto para fazer o commit. Caso queira ver exatamente o quê será feito no commit, sem precisar escrever um novo objeto árvore e compará-lo dessa maneira, faça

git diff-index --cached HEAD

Exemplo: digamos que eu tenha renomeado o arquivo commit.c para git-commit.c e tenha feito um update-index para tornar isso efetivo no índice do arquivo. O comando git diff-files não mostraria nada, pois o índice do arquivo corresponde ao meu diretório de trabalho. Porém, ao o comando git diff-index ele faz:

torvalds@ppc970:~/git> git diff-index --cached HEAD
:100644 000000 4161aecc6700a2eb579e842af0b7f22b98443f74 0000000000000000000000000000000000000000 D	commit.c
:000000 100644 0000000000000000000000000000000000000000 4161aecc6700a2eb579e842af0b7f22b98443f74 A	git-commit.c

É possível ver facilmente que o item acima foi renomeado.

De fato, o comando git diff-index --cached deve sempre ser totalmente equivalente a fazer um git write-tree e comparar. Exceto que este é muito melhor para o caso onde você queira apenas averiguar onde você está.

Portanto, fazer um git diff-index --cached é basicamente muito mais útil quando você está se perguntando "o quê eu já marquei para ser feito o commit e qual a diferença com uma árvore anterior".

MODO SEM CACHE

O modo "non-cached" adota uma abordagem diferente sendo potencialmente o mais útil dos dois, pois o que ele faz não pode ser emulado com um git write-tree + git diff-tree. Assim sendo, este é o modo predefinido. A versão sem cache faz questiona:

mostre-me as diferenças entre o `HEAD` e o que foi verificado
tree - índice do conteúdo _e_ os arquivos que não estão atualizados

o que obviamente também é uma pergunta muito útil, pois isso indica qual commit você poderia fazer. Novamente, a saída coincidente à saída git diff-tree -r para um "tee", mas com uma desvantagem.

A desvantagem é que, caso algum arquivo não coincida com o índice, nós não temos uma uma estrutura de armazenamento para tanto e utilizamos a mágica do sha1 "zerado" para exibi-los. Então, digamos que você editou o arquivo kernel/sched.c, mas ainda não fez um git update-index nele - ainda não há um "objeto" associado a nova condição obtendo:

torvalds@ppc970:~/v2.6/linux> git diff-index --abbrev HEAD
:100644 100644 7476bb5ba 000000000 M	kernel/sched.c

isto é, exiba que a árvore mudou, que o kernel/sched.c não está atualizado e pode haver novas coisas. O sha1 zerado significa que, para obter um "diff" real, é necessário olhar diretamente para o objeto no diretório de trabalho, em vez de um "diff" de objeto para objeto.

Note
Como em outros comandos desse tipo, o git diff-index não analisa de forma alguma o conteúdo do arquivo. Então talvez o kernel/sched.c não tenha realmente mudado, e é só que você mexeu. Em ambos os casos, é importante observar que você precisa fazer um git update-index para sincronizar o índice.
Note
Você pode exibir junto uma mistura de arquivos como "foi atualizado" e "ainda está sujo no diretório de trabalho". Você sempre pode dizer qual arquivo está em qual condição, uma vez que os que "foram atualizados" exibam um sha1 válido e os "que não estão sincronizados com o índice" sempre terão o sha1 especial, zerados.

GIT

Parte do conjunto git[1]

scroll-to-top