git visual diff entre ramos


196

Esta resposta é ótima para ver uma diferença visual entre dois arquivos que estão marcados no git: Como eu vejo a saída 'git diff' com um programa visual diff?

No entanto, eu gostaria de ver uma diferença visual entre dois ramos. Até agora, minha melhor aposta parece ser:

git diff --name-status master dev

o que não é muito informativo e nem muito visual.

Existe algo melhor lá fora?


Adicionei uma resposta abaixo, incluindo um visual anteriormente não endereçado aqui: como ver quais ramificações de confirmação contêm (seja em comum ou exclusivamente). Você pode fazer muito com a funcionalidade principal do git. Pode ser bom especificar o que você gostaria de incluir no seu diff visual. A maioria das respostas se concentra nas diferenças de confirmações linha a linha, onde seu exemplo se concentra nos nomes dos arquivos afetados em uma determinada confirmação.
Kay V

Respostas:


227

Use git diffcom um intervalo .

git diff branch1..branch2

Isto irá comparar as dicas de cada ramo.

Se você realmente deseja algum software GUI, pode tentar algo como o SourceTree, que suporta Mac OS X e Windows.


27
Não é visual visual. ;)
marines

35
Nos sistemas Linux, eu recomendo instalar Meld, defini-lo como padrão difftoolcom git config --global diff.tool melde finalmente iniciá-lo em vez de simplesmente diffcom git difftool branch1..branch2. O resultado é muito melhor.
Gabriel

8
usando Meld visual difftool sem configuração do git:git difftool -t meld branch1..branch2
user3780389

2
Para os leitores: No meu post, todas as respostas aqui oferecem uma maneira de fazer o que a pessoa solicitou (uma diferença em uma GUI), exceto esta resposta.
L Huxley

3
@GHuxley, onde o OP solicita uma solução GUI?
alex

97

Para ver uma diferença visual de todas as diferenças entre dois ramos, eu gosto de mesclar os dois ramos - SEM comprometer a mesclagem - e depois usar git guiou git Extensions para obter uma visão geral das diferenças.

Linha de comando Git para mesclar sem confirmar:

git checkout branchA
git merge --no-commit --no-ff branchB

Quando terminar, você pode desfazer a mesclagem com

git merge --abort

(h / t para @ jcugat's para o comentário)


10
Não subestime a relevância dessa abordagem se você gosta de usar seu IDE (ou outra ferramenta de GUI nem sempre fácil de integrar com o Git)! Essa opção é incrível para mim, pois eu uso o Intellij e prefiro poder alternar entre arquivos modificados no IDE, em toda a sua glória editável no local, destacada por sintaxe, destacada por erro, destacada por código morto. Eu uso essa abordagem para todas as minhas análises de código e deixei para trás a ferramenta de comparação de solicitações de pedidos abismal no GitHub. Eu posso até fazer edições e, quando terminar, basta criar uma nova ramificação com "-code-review" anexado e confirmar!
kghastie

2
Funciona desde que não haja conflitos de mesclagem e falha quando há conflitos de mesclagem.
Naga Kiran

1
Eu gosto muito dessa abordagem! Além disso, pelo menos para mim, git guiisso mostra os conflitos como não-estágios, os não-conflitos como estágios, para que você tenha uma boa distinção. Ajuda muito mais para mim do que a resposta mais bem avaliada: D
DJGummikuh 19/04/2016

55

Caso esteja usando o Intellij Idea IDE, basta usar a opção de comparação no ramo.

insira a descrição da imagem aqui


existem configurações / opções / configurações para modificar essa comparação? (como --ignore-space-at-eol para git diff)
Superole

49

Você também pode fazer isso facilmente com o gitk.

> gitk branch1 branch2

Primeiro clique na ponta do branch1. Agora clique com o botão direito do mouse na ponta do branch2 e selecione Diff this-> selected.


7
O uso de gitk branch1..branch2apenas shows confirma entre as duas revisões.
T3rm1

usando gitk (sem branch1 branch2) se você quiser ver todas as alterações feitas em seu branch.
mikewasmike 20/04

31

Para aqueles de vocês no Windows que usam o TortoiseGit, é possível obter uma comparação visual através deste recurso bastante obscuro:

  1. Navegue até a pasta que deseja comparar
  2. Mantenha pressionado shifte clique com o botão direito do mouse
  3. Vá para TortoiseGit -> Procurar referência
  4. Use ctrlpara selecionar duas ramificações para comparar
  5. Clique com o botão direito do mouse na sua seleção e clique em "Comparar referências selecionadas"

Fonte: http://wikgren.fi/compare-diff-branches-in-tortoise-git-or-how-to-preview-changes-before-doing-a-merge/


Por que você deve pressionar Shift?
Zero3

1
Manter pressionada a tecla Shift enquanto clica com o botão direito do mouse sempre abre o menu completo do TortoiseGit, caso você tenha configurado o TortoiseGit para não mostrar determinados itens.
Oversearch

Isso é incrível. Gostaria que fosse uma característica mais proeminente.
Drew

22

Se você estiver usando o OSX ou o Windows 7 ou superior, o Atlassian SourceTree funciona muito bem para isso. É de graça.

Você pode ver as alterações faseadas em uma configuração de comparação lado a lado e comparar facilmente local com remoto e quaisquer outras duas ramificações. Quando vários arquivos são selecionados, o diff aparece como abaixo:

insira a descrição da imagem aqui

Supondo que você fez check-out de um ramo de recursos e deseja ver a diferença em relação a 'mestre', clique com o botão direito do mouse no ramo 'mestre' e selecione "Diferença em relação à corrente"

Infelizmente, não parece que estará disponível nas distribuições * nix em breve .


3
Pode ser "gratuito", mas certamente requer algum tempo para ler os termos de registro deles: atlassian.com/legal/customer-agreement Até agora, gostei da ferramenta, mas isso pode estar me impedindo .
akauppi

@akauppi Que partes te deixam de fora? Eu pensei que todos esses acordos eram praticamente o mesmo
alex

Isso foi a mais de um ano atrás. Sim, os acordos podem ser semelhantes, mas foi o processo que o SourceTree estava me pressionando. Foi estranho. Passado, no entanto. Não terei os detalhes para você. Desculpe
akauppi

16

Tente "difftool" (supondo que você tenha a configuração das ferramentas diff) - consulte https://www.kernel.org/pub/software/scm/git/docs/git-difftool.html

Acho o status do nome bom para o resumo, mas o difftool irá repetir as alterações (e a -dopção fornece a visualização do diretório), por exemplo

$ git difftool their-branch my-branch

Viewing: 'file1.txt'
Launch 'bc3' [Y/n]:
...

Ou como @ rsilva4 mencionado com -de padrão para o seu ramo atual, é apenas - por exemplo, compare com o master:

$  git difftool -d master..

... e sim - existem muitas variações - https://www.kernel.org/pub/software/scm/git/docs/git-reset.html


3
Obrigado, isso foi útil. Adicionando a opção -d vai tornar as coisas ainda melhor:git difftool -d their-abc my-abc
rsilva4

Desde explainshell.com não parece ser capaz de analisar a opção -d no momento, aqui está o que a página do manual diz:-d --dir-diff: Copy the modified files to a temporary location and perform a directory diff on them. This mode never prompts before launching the diff tool.
waldyrious

8

Se você estiver usando o github, poderá usar o site para isso:

github.com/url/to/your/repo/compare/SHA_of_tip_of_one_branch...SHA_of_tip_of_another_branch

Isso mostrará uma comparação dos dois.


Isso funciona (eu faço isso o tempo todo), mas requer que você envie seu código para o repositório do github. Isso não é realmente uma ressalva aceitável na minha opinião, no entanto.
adamwong246

2
ou apenas github.com/url/to/your/repo/compare/e, em seguida, você pode selecionar os ramos
caramba

E como faço para obter esse SHA? Quero dizer, o que significa SHA da ponta de um galho?
Optimus Prime

8

Em GitExtensions, você pode selecionar os dois ramos na grade de revisão com Ctrlpressionado. Então você pode ver arquivos que diferem entre esses ramos. Ao selecionar um arquivo, você verá o diff.

Retirado daqui


Eu tenho duas ramificações selecionadas na minha grade de revisão, mas não estou vendo nenhum comando de comparação no menu na parte superior ou quando clico com o botão direito.
Eric

1
Encontrei nos cabeçalhos do painel inferior. Existem Confirmar, Árvore de arquivos e Dif.
Eric

7

ATUALIZAR

Mac: Agora eu uso o SourceTree. Absolutamente recomendado. Eu gosto especialmente da maneira como você pode encenar / desfilar pedaços.

Linux: Eu tive sucesso com:

  • smartgit
  • GitKraken
  • meld

Por exemplo, para instalar smartgitno Ubuntu:


Isso faz o trabalho:

git-diffall com uma ferramenta de GUI diff como meld. Veja o ponto 5 aqui:

http://rubyglazed.com/post/15772234418/git-ify-your-command-line

Há um bom post sobre git e meld aqui: http://nathanhoad.net/how-to-meld-for-git-diffs-in-ubuntu-hardy


4

Se você usa o Eclipse, pode comparar visualmente sua ramificação atual na área de trabalho com outra tag / ramificação:

Comparação da área de trabalho do Eclipse


Pessoalmente, acho o suporte do Eclipse para sub-paridades diferentes, mas se isso é tudo o que você tem, está tudo bem.
usar o seguinte comando

4

Você também pode usar o P4Merge gratuito do Perforce para fazer isso:

http://www.perforce.com/product/components/perforce-visual-merge-and-diff-tools

insira a descrição da imagem aqui

Detalhes sobre a integração com o Git podem ser encontrados aqui e aqui

mas um resumo rápido dos links acima é:

  • Coloque os seguintes bits no seu ~ / .gitconfig, e então você pode fazer $ git mergetoole $ git difftoolusar o p4merge
  • Observe que $ git diffainda usará apenas o visualizador de diferenças em linha padrão :) (testado com a versão 1.8.2 do git)

Alterações para .gitconfig

[merge]
  keepBackup = false
    tool = p4merge
[mergetool "p4merge"]
    cmd = /Applications/p4merge.app/Contents/Resources/launchp4merge "\"$PWD/$BASE\"" "\"$PWD/$REMOTE\"" "\"$PWD/$LOCAL\"" "\"$PWD/$MERGED\""
    keepTemporaries = false
    trustExitCode = false
    keepBackup = false
[diff]
    tool = p4merge
[difftool "p4merge"]
    cmd = /Applications/p4merge.app/Contents/Resources/launchp4merge "\"$REMOTE\"" "\"$LOCAL\""

2

Se você usar o excelente editor WebStorm, poderá comparar com qualquer ramo que desejar: Comparação do git do Webstorm


Na verdade, acabei de notar que o IntelliJ IDEA (provavelmente também o WebStorm) tem a capacidade de "Realçar confirmações não escolhidas", o que deixa bem claro quais confirmações existem na ramificação, mas não em outra.
Arthurakay

Sim, eu apenas usei o intellij para selecionar seletivamente várias alterações feitas em um repositório por "formatação automática ao salvar". Foi muito fácil ... Tinha que encontrar a opção "Compare antes com o local" para fazê-lo.
Tom H

1

Dê uma olhada em git show-branch

Você pode fazer muito com a funcionalidade principal do git. Pode ser bom especificar o que você gostaria de incluir no seu diff visual. A maioria das respostas se concentra nas diferenças de confirmações linha a linha, onde seu exemplo se concentra nos nomes dos arquivos afetados em uma determinada confirmação.

Um visual que parece não ser abordado é como ver os commits que os ramos contêm (seja em comum ou exclusivamente).

Para esse visual, eu sou um grande fã de git show-branch; ele divide uma tabela bem organizada de confirmações por filial de volta ao ancestral comum. - para testá-lo em um repositório com várias ramificações com divergências, basta digitar git show-branche verificar a saída - para obter uma descrição com exemplos, consulte Comparar confirmações entre ramificações Git


0

Aqui está como ver a diferença visual entre confirmações inteiras, em oposição a arquivos únicos, no Visual Studio (testado no VS 2017). Infelizmente, ele funciona apenas para confirmações em uma ramificação: No "Team Explorer", escolha a visualização "Ramificações", clique com o botão direito do mouse no repositório e escolha "Visualizar histórico", como na imagem a seguir.

insira a descrição da imagem aqui

Em seguida, o histórico da ramificação atual aparece na área principal. (Onde as ramificações que terminaram como confirmações anteriores na ramificação atual são marcadas por rótulos.) Agora selecione algumas confirmações com Ctrl-Esquerda, clique com o botão direito do mouse e selecione "Comparar confirmações ..." no menu pop-up.

Para saber mais sobre a comparação de ramificações no mundo da Microsoft, consulte esta pergunta sobre o stackoverflow: Diferenças entre ramificações git usando o Visual Studio .


1
Mostra apenas o histórico de uma única ramificação; portanto, não é possível comparar entre ramificações.
Michał Fita

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.