Para ver como um ficheiro monitorizado difere de uma versão anterior num repositório Git no seu Mac, abra o Terminal, navegue até ao repositório e execute git diff REVISION -- path/to/file. Substitua REVISION por um commit como HEAD~1 e o caminho pelo caminho relativo ao repositório do ficheiro. Isto compara essa versão comitada com o ficheiro tal como existe atualmente na sua árvore de trabalho; não altera o ficheiro.
Abrir o Terminal no Repositório
No Finder, localize a pasta do repositório. Abra o Terminal, escreva cd seguido de um espaço, arraste a pasta do repositório para a janela do Terminal e prima Return. A Apple documenta o arrastar de elementos para o Terminal como uma forma de especificar caminhos de ficheiros e pastas. Verifique se está numa árvore de trabalho do Git com:
git status
Se o Git indicar que o diretório atual não é um repositório, mude para a pasta de nível superior do repositório e tente novamente. De acordo com a Apple, o Terminal utiliza o zsh por predefinição no macOS. Os comandos abaixo funcionam nessa shell; utilizam caminhos entre aspas para que os espaços nos nomes sejam preservados.
Comparar o Ficheiro Atual com uma Revisão Anterior
Utilize este formato:
git diff REVISION -- "path/to/file"
Por exemplo, para comparar o ficheiro Sources/Menu.swift atual com a sua versão um commit de primeiro pai antes do atual HEAD, execute:
git diff 'HEAD~1' -- "Sources/Menu.swift"
O -- marca o fim dos argumentos de revisão e de opções e o início do caminho. O Git documenta este formato como a comparação da árvore de trabalho com o commit indicado. No resultado, as linhas que começam por - pertencem à versão anterior, as linhas com + pertencem ao ficheiro atual e as linhas circundantes não marcadas fornecem contexto. Documentação do git diff
HEAD~1 refere-se ao primeiro pai do commit atual; HEAD~2 recua dois passos de primeiro pai. Isto é útil para o histórico recente, mas pode não identificar a alteração exata que tem em mente, especialmente em situações de merge. A sintaxe de revisões do Git também aceita nomes de branches, tags e IDs de commit. Utilize um commit previamente identificado quando precisar de um ponto histórico específico. Sintaxe de revisões do Git
Para encontrar um commit que tenha alterado o ficheiro, inspecione o seu histórico:
git log --oneline -- "Sources/Menu.swift"
Copie o ID do commit relevante a partir do resultado e utilize-o no comando diff:
git diff 4f2a9c1 -- "Sources/Menu.swift"
Substitua 4f2a9c1 pelo ID real apresentado no seu repositório. O Git aceita um ID de commit abreviado desde que não seja ambíguo; se for ambíguo ou inválido, utilize um ID mais longo ou outro nome de revisão.
Escolha a Comparação Adequada à Sua Necessidade
Uma comparação com a árvore de trabalho inclui quaisquer edições atuais no ficheiro, quer estejam staged ou unstaged. Se, em vez disso, pretender comparar duas versões já comitadas, forneça ambas as revisões:
git diff OLD_REV NEW_REV -- "Sources/Menu.swift"
Por exemplo, git diff 'HEAD~3' HEAD -- "Sources/Menu.swift" compara o ficheiro comitado três passos de primeiro pai atrás com a versão no commit atual. Isto não inclui edições não comitadas. O Git descreve o formato de dois commits como uma comparação entre dois commits arbitrários. Documentação do git diff
Se quiser comparar com a versão que está preparada (staged) para o próximo commit, o formato --cached do Git compara o índice com um commit. Por exemplo:
git diff --cached HEAD -- "Sources/Menu.swift"
Isto responde a uma pergunta diferente da de comparar o ficheiro de trabalho atual: apresenta as alterações staged relativamente a HEAD.
Interpretar Resultados Vazios e Erros Comuns
A ausência de resultados no diff significa habitualmente que o Git não encontra qualquer diferença para esse caminho entre a revisão escolhida e o estado atual selecionado. Confirme a ortografia e as maiúsculas/minúsculas do caminho, e certifique-se de que está dentro do repositório correto. Se o Git indicar que o caminho é desconhecido na revisão, esse ficheiro poderá ainda não existir nessa altura ou o caminho poderá ter mudado. Para inspecionar um ficheiro renomeado ou eliminado, utilize o seu caminho histórico e verifique a lista de ficheiros ou o log do commit correspondente.
Um ficheiro que nunca tenha sido monitorizado pelo Git não tem uma versão comitada com a qual comparar. Além disso, o diff de texto comum do Git pode não fornecer uma comparação linha a linha legível para ficheiros binários. O comando apresenta alterações; não restaura a versão antiga. Evite git checkout ou git restore quando o seu objetivo for apenas inspecionar, uma vez que esses comandos produzem efeitos diferentes nos ficheiros.
Para uma visualização mais restrita, reduza o número de linhas de contexto, por exemplo com git diff -U1 'HEAD~1' -- "Sources/Menu.swift". A opção -U do Git controla quantas linhas de contexto circundantes são apresentadas. Assim que tiver a revisão e o caminho pretendidos, este comando oferece uma perspetiva direta e reproduzível das diferenças, mantendo o seu ficheiro intacto.
Fontes
Alterar a shell predefinida no Terminal no Mac — Suporte Apple
Arrastar elementos para uma janela do Terminal — Suporte Apple