Eu realizei algumas mudanças a serem confirmadas; como posso ver o diff de todos os arquivos preparados para a próxima confirmação? Estou ciente do status do git , mas gostaria de ver as diferenças reais - e não apenas os nomes dos arquivos que estão em teste.
Vi que a página de manual do git-diff (1) diz
git diff [--opções] [-] […]
Este formulário é para exibir as alterações feitas em relação ao índice (área de preparação para a próxima confirmação). Em outras palavras, as diferenças são o que você poderia dizer ao git para adicionar mais ao índice, mas ainda não o fez. Você pode preparar essas alterações usando o git-add (1).
Infelizmente, não consigo entender isso. Deve haver uma única linha útil para a qual eu possa criar um apelido, certo?
git status -v
funciona também Veja minha resposta abaixoless
, como em:git status -v | less
- pedaços gerenciáveis :)Respostas:
Deve ser apenas:
--cached
significa mostrar as alterações no cache / índice (ou seja, alterações em etapas) em relação à atualHEAD
.--staged
é um sinônimo para--cached
.--staged
e--cached
não apontaHEAD
, apenas diferença em relação aHEAD
. Se você escolher o que confirmar usandogit add --patch
(ougit add -p
),--staged
retornará o que está preparado.fonte
git diff --name-only --cached
por post no stackoverflow.com/a/4525025/255187git difftool --staged
vez degit diff --staged
iniciar a ferramenta visual diff padrão em cada arquivo.difftool
pode ser substituído pordiff
outros argumentos também.git difftool --staged -d
para diferenciar os dois diretórios em uma ferramenta visual, em vez de um arquivo por vez.git diff --cached -- <stagedfile>
Um gráfico simples torna isso mais claro:
git diff
Mostra as alterações entre o diretório ativo e o índice. Isso mostra o que foi alterado, mas não é preparado para uma confirmação.
git diff --cached
Mostra as alterações entre o índice e o HEAD (que é o último commit neste ramo). Isso mostra o que foi adicionado ao índice e preparado para uma confirmação.
git diff HEAD
Mostra todas as alterações entre o diretório ativo e o HEAD (que inclui alterações no índice). Isso mostra todas as alterações desde a última confirmação, independentemente de terem sido preparadas ou não para confirmação.
Também :
Há um pouco mais de detalhes no 365Git.
fonte
foo.c
e não executargit add foo.c
, ele nãofoo.c
estará no índice ; não é preparado para confirmação. Segit diff foo.c
ingenuamente comparado ao trabalhofoo.c
com o índice, ele teria que mostrar uma diferença gigante entre um arquivo vazio / inexistente e todo o conteúdo defoo.c
. Então, de fato, quando um arquivo não existe no índice, elegit diff
recua, para esse arquivo, ao usar aHEAD
cópia.HEAD
qual as alterações faseadas são aplicadas. Lembre-se de que o Git funciona salvando alterações, não salvando arquivos inteiros. Quando você monta um arquivo, ele apenas armazena as alterações feitas. Se o índice estiver em branco como você sugere, ele não saberá como salvar as alterações no índice e precisará salvar o arquivo inteiro como "recém-adicionado" - o que está errado.HEAD
terão a versão inalterada dofoo.c
arquivo (eles não são cópias físicas, mas apenas cópias lógicas para você e para mim. Para o Git, eles são exatamente o mesmo fluxo de dados a que todos os commit que já envolveram esse arquivo se referem. ) Então, quando você faz issogit diff
no totalmente sem estágio,foo.c
ele não está realmente voltando aoHEAD
fato de estar fazendo a diferença com o Index (que por acaso contém exatamente a mesma versão do arquivoHEAD
). Portanto, o gráfico está correto.git status -v
é equivalente agit diff --cached
(maisgit status
claro)Se você estiver interessado em uma visualização visual lado a lado, a ferramenta difusa visual difusa pode fazer isso. Ele exibirá até três painéis se algumas, mas nem todas, as alterações forem realizadas. No caso de conflitos, haverá até quatro painéis.
Invoque-o com
na sua cópia de trabalho do Git.
Se você me perguntar, o melhor visual diferenciado que já vi há uma década. Além disso, não é específico para o Git: ele interopera com uma infinidade de outros VCS, incluindo SVN, Mercurial, Bazaar, ...
Veja também: Mostrar a árvore em etapas e em trabalho no git diff?
fonte
brew install diffuse
funciona no OS X. Não mostra três painéis se houver alterações nos estágios e nos estágios - você quis dizer alterações ainda não no índice?Observe que
git status -v
também mostra as alterações faseadas! (o que significa que você precisa ter realizado -git add
- algumas alterações. Nenhuma alteração faseada, nenhuma diferençagit status -v
.Faz isso desde Git 1.2.0, fevereiro de 2006 )
Em sua forma longa (padrão),
git status
possui uma opção "detalhada" não documentada que realmente exibe a diferença entre HEAD e índice.E está prestes a se tornar ainda mais completo: consulte " Mostrar árvore em estágio e em trabalho no git diff? " (Git 2.3.4+, Q2 2015):
fonte
git diff HEAD
git status -vv
também inclui o quegit diff HEAD
faz.git version 1.8.3.1
. Sei que é antigo, mas, se possível, observe quando esse sinalizador foi introduzido.git status -v
é mais antigo ( github.com/git/git/commit/… , git 1.2.0, fevereiro de 2006!). Observe que ele exibe o diff entre o índice eHEAD
: se você adicionou algo ao índice (nogit add
),git status -v
não exibirá nenhum diff.git status -v -v
é mais recente (Git 2.3.4, março de 2015)git diff -v
.Você pode usar este comando.
A
--cached
opção degit diff
meios para obter arquivos temporários, e a--name-only
opção significa obter apenas nomes dos arquivos.fonte
--name-only
opção que eu também poderia usar o regulargit status
A partir da versão 1.7 e posterior, deve ser:
fonte
USANDO UMA FERRAMENTA DIFF VISUAL
A resposta padrão (na linha de comando)
As principais respostas aqui mostram corretamente como visualizar as alterações em cache / faseadas no
Index
:ou
$ git diff --staged
que é um alias.Iniciando a ferramenta Visual Diff
A resposta padrão cuspirá as alterações diff no git bash (ou seja, na linha de comando ou no console). Para aqueles que preferem uma representação visual das diferenças de arquivo em estágios, existe um script disponível no git que lança uma ferramenta visual diff para cada arquivo visualizado, em vez de mostrá-los na linha de comando, chamada
difftool
:Isso fará o mesmo
git diff --staged
, exceto quando a ferramenta diff for executada (ou seja, toda vez que um arquivo for processado por diff), ele iniciará a ferramenta visual diff padrão (no meu ambiente, isso é kdiff3 ).Após o lançamento da ferramenta, o script git diff será pausado até que a ferramenta visual diff seja fechada. Portanto, você precisará fechar cada arquivo para ver o próximo.
Você sempre pode usar
difftool
no lugar dosdiff
comandos in gitPara todas as suas necessidades visuais de diferenças,
git difftool
funcionará no lugar de qualquergit diff
comando, incluindo todas as opções.Por exemplo, para que a ferramenta visual diff seja iniciada sem perguntar se é necessário fazê-lo para cada arquivo, adicione a
-y
opção (acho que geralmente você vai querer isso !!):Nesse caso, ele abrirá cada arquivo na ferramenta visual diff, um de cada vez, exibindo o próximo após o fechamento da ferramenta.
Ou observe o diff de um arquivo específico que está preparado no
Index
:Para todas as opções, consulte a página do manual:
Configurando a Ferramenta Visual Git
Para usar uma ferramenta visual git diferente da padrão, use a
-t <tool>
opção:Ou, consulte a página de manual do difftool para saber como configurar o git para usar uma ferramenta visual diferente do padrão.
Exemplos de
.gitconfig
entradas para vscode como ferramenta diff / mergeParte da configuração de um difftool envolve a alteração do
.gitconfig
arquivo, através de comandos git que o alteram nos bastidores ou a edição direta.Você pode encontrá-lo
.gitconfig
em seu diretório pessoal, como~
no Unix ou normalmentec:\users\<username>
no Windows).Ou, você pode abrir o usuário
.gitconfig
no seu editor Git padrão comgit config -e --global
.Aqui estão exemplos de entradas no meu usuário global
.gitconfig
do VS Code como ferramenta diff e ferramenta de mesclagem:fonte
Para comparação entre Área de armazenamento temporário e repositório (última confirmação), use
O comando compara suas
$ git add fileName
alterações faseadas ( ) com seu último commit. Se você quiser ver o que você preparou para o seu próximo commit, você pode usar o git diff --staged. Este comando compara suas alterações faseadas com seu último commit.Para comparação de trabalho versus armazenamento temporário, use
O comando compara o que está no seu diretório de trabalho com o que está na sua área de preparação. É importante observar que o git diff por si só não mostra todas as alterações feitas desde o seu último commit - apenas as alterações que ainda não foram preparadas. Se você organizou todas as suas alterações (
$ git add fileName
), o git diff não fornecerá saída.Além disso, se você preparar um arquivo (
$ git add fileName
) e depois editá-lo, poderá usar o git diff para ver as mudanças no arquivo que estão preparadas e as que não estão preparadas.fonte
$ git diff
" . Tenho certeza que segit diff
compara entre Trabalhar vs Estadiamento. Veja stackoverflow.com/a/1587952Se suas intenções são direcionar por push uma ramificação de repositório remoto e sua primeira passagem em um log de alterações de confirmação estiver incompleta, você poderá corrigir a declaração de confirmação antes de enviar dessa maneira.
Localmente
... faça algumas alterações ...
... lembre-se de mais alterações não mencionadas no commit ...
git diff origin / master # veja as alterações faseadas mas não forçadas
... alterar declaração de confirmação faseada ...
fonte
Se você tiver mais de um arquivo com alterações em etapas, pode ser mais prático usá-lo
git add -i
, selecione6: diff
e, finalmente, selecione o (s) arquivo (s) em que está interessado.fonte
Por padrão, o git diff é usado para mostrar as alterações que não são adicionadas à lista de arquivos atualizados do git. Mas se você quiser mostrar as alterações que foram adicionadas ou escalonadas, precisará fornecer opções extras que permitirão ao git saber que você está interessado em diferenças de arquivos escalonados ou adicionados .
Exemplo
Depois de adicionar os arquivos, você não poderá usar o padrão 'git diff'. Você deve fazer o seguinte: -
fonte
git gui
egit-cola
são utilitários gráficos que permitem visualizar e manipular o índice. Ambos incluem diferenças visuais simples para arquivos em etapas egit-cola
também podem iniciar uma ferramenta de diferenciação visual lado a lado mais sofisticada.Veja minha resposta intimamente relacionada em Como remover um arquivo do índice no git? e também este catálogo oficial de clientes Git - GUI .
fonte
Pense
gitk
também na ferramenta, fornecida com git e muito útil para ver as mudançasfonte