Mostrando quais arquivos foram alterados entre duas revisões

Eu quero mesclar duas ramificações que foram separadas por um tempo e queria saber quais arquivos foram modificados.

Veio através deste link: http://linux.yyz.us/git-howto.html que foi bastante útil.

As ferramentas para comparar os ramos que encontrei são:

  • git diff master..branch
  • git log master..branch
  • git shortlog master..branch

Estava imaginando se há algo como “git status master..branch” para ver apenas os arquivos que são diferentes entre os dois ramos.

Sem criar uma nova ferramenta, acho que é o mais próximo que você pode fazer agora (o que, é claro, mostrará repetições se um arquivo foi modificado mais de uma vez):

  • git diff master..branch | grep "^diff"

Estava querendo saber se há algo que eu perdi …

Para comparar o ramo atual com o master

 $ git diff --name-status master 

Para comparar qualquer par de filiais

 $ git diff --name-status firstbranch..yourBranchName 

Isso deve fazer o que você precisa, se eu entendi corretamente.

Experimentar

 $ git diff --stat --color master..branchName 

Isso fornecerá mais informações sobre cada alteração e, ao mesmo tempo, usará o mesmo número de linhas.

Você também pode virar as ramificações para obter uma imagem ainda mais clara da diferença se você fosse mesclar de outra maneira:

 $ git diff --stat --color branchName..master 

Também tenha em mente que o git tem ramificações baratas e fáceis. Se eu acho que uma mesclagem pode ser problemática, eu crio um branch para a mesclagem. Portanto, se o master tiver as alterações que eu quero mesclar e ba for minha ramificação que precisa do código do mestre, eu poderia fazer o seguinte:

 git checkout ba git checkout -b ba-merge git merge master .... review new code and fix conflicts.... git commit git checkout ba git merge ba-merge git branch -d ba-merge git merge master 

O resultado final é que eu experimentei a mesclagem em uma ramificação descartável antes de enroscar com o meu ramo. Se eu me atrapalhar, posso simplesmente deletar o ramo de ba-merge e começar de novo.

Se alguém está tentando gerar um arquivo diff de dois ramos:

 git diff master..otherbranch > myDiffFile.diff 

Observe que o git facilita a tentativa de mesclar e afastar qualquer problema se você não gostar do resultado. Pode ser mais fácil do que procurar possíveis problemas antecipadamente.

Existe também um método baseado em GUI.

Você pode usar o gitk .

  1. Corre:

     $ gitk --all 
  2. Clique com o botão direito do mouse em um commit de um branch e selecione Mark this commit no menu pop-up.

  3. Clique com o botão direito do mouse em um commit de outro branch e selecione Diff this -> marked commit ou Diff marked commit -> this .

Em seguida, haverá uma lista de arquivos alterados no painel inferior direito e os detalhes do diff no painel inferior esquerdo.

Mais uma opção, usando meld neste caso:

 git difftool -d master otherbranch 

Isso permite não apenas ver as diferenças entre os arquivos, mas também fornece uma maneira fácil de apontar e clicar em um arquivo específico.

Ao trabalhar colaborativamente, ou em vários resources de uma só vez, é comum que o desenvolvedor ou o seu mestre contenha trabalhos que não estão incluídos em sua filial e serão exibidos incorretamente nos diffs básicos.

Se o seu Upstream pode ter mudado, você deve fazer isso:

 git fetch git diff origin/master... 

O uso do git diff master pode include ou não include mudanças relevantes.

E se você estiver procurando por alterações apenas entre determinados arquivos, então:

 git diff branch1 branch2 -- myfile1.js myfile2.js 

branch1 é opcional e sua ramificação atual (a ramificação em que você está) será considerada por padrão se branch1 não for fornecido. por exemplo:

 git diff master -- controller/index.js 

Se você estiver usando o IntelliJ IDEA , também poderá comparar qualquer ramificação com sua ramificação de trabalho atual. Consulte http://www.jetbrains.com/idea/webhelp/merging-deleting-and-comparing-branches.html#d288093e3827 para obter mais informações. Isso também está disponível na edição gratuita .

Existem dois ramos, digamos

  • A (ramo em que você está trabalhando)
  • B (outro ramo com o qual você deseja comparar)

Estar no ramo A você pode digitar

 git diff --color B 

então isso lhe dará uma saída de

insira a descrição da imagem aqui

O ponto importante sobre isso é

  1. Texto em verde está dentro presente na Filial A

  2. Texto em vermelho está presente no Ramo B

Há muitas respostas aqui, mas eu queria adicionar algo que eu geralmente uso. Se você estiver em um dos ramos que gostaria de comparar, normalmente faço o seguinte. Por causa desta resposta, diremos que estamos em nosso ramo secundário. Dependendo de qual visão você precisa no momento dependerá do que você escolher, mas na maioria das vezes eu estou usando a segunda opção dos dois. A primeira opção pode ser útil se você estiver tentando voltar a uma cópia original – de qualquer forma, ambos fazem o trabalho!

Isto irá comparar o mestre com o ramo em que estamos (que é secundário) e o código original será as linhas adicionadas e o novo código será considerado as linhas removidas

 git diff ..master 

OU

Isso também irá comparar mestre para o ramo que estamos em (que é secundário) e o código original será as linhas antigas e o novo código será as novas linhas

 git diff master.. 

Se você gosta de GUI e está usando o Windows, aqui está uma maneira fácil.

  1. Baixar WinMerge
  2. Confira os dois ramos em pastas diferentes
  3. Faça uma pasta por pasta comparar usando WinMerge. Você também pode fazer modificações facilmente se uma das ramificações for aquela em que você está trabalhando.

Você também pode comparar facilmente os ramos de arquivos alterados usando, por exemplo, o TortoiseGit . Basta clicar em Browse References e escolher as filiais que você deseja comparar.

Por exemplo, se você comparar sua ramificação com o mestre , obterá como resultado uma lista de arquivos que serão alterados no mestre, se você decidir mesclar sua ramificação em mestre .

Lembre-se de que você terá um resultado diferente se comparar o mestre com o seu ramo e o seu ramo com o mestre .