No Git, como eu poderia comparar o mesmo arquivo entre dois commits diferentes (não contíguos) no mesmo ramo (master por exemplo)?
Estou procurando um recurso de comparação como o Visual SourceSafe (VSS) ou o Team Foundation Server (TFS).
É possível no Git?
..
não é realmente necessário, embora funcione com ele (exceto em versões bastante antigas, talvez). Você também pode usargit log
ougitk
encontrar SHA1s para usar, caso os dois commits estejam muito distantes.gitk
também possui um "diff selected -> this" e "diff this -> selected" em seu menu de contexto.--
é útil, por exemplo, quando você tem um arquivo chamado-p
. É bom usar em scripts, apenas em casos raros necessários na prática.Você também pode comparar dois arquivos diferentes em duas revisões diferentes, assim:
git diff <revision_1>:<file_1> <revision_2>:<file_2>
fonte
<file_1>
e<file_2>
estão no diretório atual, não no diretório de nível superior git gerenciado, um tem que preceder./
em Unix:<revision_1>:./filename_1
Se você configurou o "difftool", pode usar
Exemplo: Comparando um Arquivo da Última Confirmação com a Confirmação Anterior na Mesma Ramificação: Supondo que, se você estiver na pasta raiz do projeto
Você deve ter as seguintes entradas no seu arquivo ~ / .gitconfig ou no projeto / .git / config. Instale o p4merge [Esta é minha ferramenta preferida de difusão e mesclagem]
fonte
Verifique
$ git log
, copie o ID SHA-1 das duas confirmações diferentes e execute ogit diff
comando com esses IDs. por exemplo:fonte
git diff (sha-id-one) (sha-id-two) -- filename.ext
sem o nome do arquivo, ele listará as diferenças de todos os arquivos nesses dois commits.Se você quiser ver todas as alterações no arquivo entre as duas confirmações em uma base de confirmação por confirmação, também poderá fazer
git log -u $start_commit..$end_commit -- path/to/file
fonte
Aqui está um script Perl que imprime os comandos diff do Git para um determinado arquivo, conforme encontrado em um comando de log do Git.
Por exemplo
Rendimentos:
que poderia ser recortado e colado em uma sessão de janela de shell ou canalizado para
/bin/sh
.Notas:
Código:
fonte
Se você quiser fazer uma comparação com mais de um arquivo, com o método especificado por @mipadi:
Por exemplo, diff between
HEAD
e yourmaster
, para encontrar todos os.coffee
arquivos:Isso pesquisará recursivamente
your_search_folder/
todos os.coffee
arquivos e fará uma diferença entre eles e suasmaster
versões.fonte
Se você possui vários arquivos ou diretórios e deseja comparar confirmações não contínuas, faça o seguinte:
Faça uma ramificação temporária ( "revisão" neste exemplo)
Retroceder para o primeiro destino de confirmação
Cereja escolhendo aqueles que se interessam
Apply diff
Quando você terminou
fonte
Apenas outra maneira de usar a grandiosidade do Git ...
fonte
difftool-file = "!git difftool HEAD@{\"$2\"} HEAD \"$1\" #"
Se você deseja uma comparação visual simples no Windows, como é possível obter no Visual SourceSafe ou no Team Foundation Server (TFS), tente o seguinte:
Nota: Após a atualização para o Windows 10, perdi as opções do menu de contexto do Git. No entanto, você pode conseguir o mesmo usando 'gitk' ou 'gitk filename' em uma janela de comando.
Depois de chamar 'Git History', a ferramenta Git GUI será iniciada, com um histórico do arquivo no painel superior esquerdo. Selecione uma das versões que você gostaria de comparar. Em seguida, clique com o botão direito do mouse na segunda versão e escolha
Dif - -> selecionado
ou
Dif. Selecionado -> este
As diferenças codificadas por cores aparecerão no painel inferior esquerdo.
fonte