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?

Snowcrash
fonte
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.

alex
fonte
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)

Tormod Hystad
fonte
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

Kamal Reddy
fonte
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.

Martin
fonte
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/

Pesquisa excessiva
fonte
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 .

Jordan Parker
fonte
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

Paul Kohler
fonte
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.

Arron
fonte
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

Mahmoodvcs
fonte
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

Snowcrash
fonte
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

Alessandro Dionisi
fonte
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\""
Brad Parks
fonte
2

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

Nico
fonte
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

Kay V
fonte
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 .

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