diferencia visual de git entre ramas

196

Esta respuesta es excelente para ver una diferencia visual entre dos archivos que se registran en git: ¿Cómo veo la salida 'git diff' con un programa visual diff?

Sin embargo, me gustaría ver una diferencia visual entre dos ramas. Hasta ahora, mi mejor apuesta parece ser:

git diff --name-status master dev

que no es muy informativo y no muy visual.

¿Hay algo mejor por ahí?

Snowcrash
fuente
Agregué una respuesta a continuación, que incluye una imagen que anteriormente no se abordó aquí: cómo ver qué ramas de commits contienen (ya sea en común o de manera única). Hay muchas cosas que puede hacer con la funcionalidad core git. Puede ser bueno especificar qué le gustaría incluir en su diferencia visual. La mayoría de las respuestas se centran en diferencias línea por línea de confirmaciones, donde su ejemplo se centra en los nombres de los archivos afectados en una confirmación determinada.
Kay V

Respuestas:

227

Usar git diffcon un rango .

git diff branch1..branch2

Esto comparará los consejos de cada rama.

Si realmente desea un software GUI, puede probar algo como SourceTree que es compatible con Mac OS X y Windows.

alex
fuente
27
No es una gama visual. ;)
infantes de marina
35
En sistemas Linux, recomiendo instalar Meld, luego configurarlo como predeterminado difftoolcon git config --global diff.tool meldy finalmente iniciarlo en lugar de simplemente diffcon git difftool branch1..branch2. El resultado es mucho más bonito.
Gabriel
8
usando Meld visual difftool sin git config:git difftool -t meld branch1..branch2
user3780389
2
Para los lectores: a partir de mi publicación, cada respuesta aquí brinda una forma de hacer lo que la persona pidió (una diferencia en una GUI), excepto esta respuesta.
G Huxley
3
@GHuxley, ¿dónde pide el OP una solución GUI?
alex
97

Para ver una diferencia visual de todas las diferencias entre dos ramas, me gusta fusionar las dos ramas, SIN comprometer la fusión, y luego usar git guio git Extensions para obtener una visión general de las diferencias.

Línea de comando de Git para fusionar sin comprometer:

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

Luego, cuando haya terminado, puede deshacer la fusión con

git merge --abort

(h / t a @ jcugat para el comentario)

Tormod Hystad
fuente
10
¡No subestimes la relevancia de este enfoque si te gusta usar tu IDE (u otra herramienta de interfaz gráfica de usuario no siempre fácil de integrar con Git)! Esta opción es increíble para mí, ya que uso Intellij y prefiero poder girar a través de archivos modificados en el IDE, en toda su gloria resaltada en sintaxis, resaltada por error, resaltada en código muerto, editable en el lugar. Utilizo este enfoque para todas mis revisiones de código, y he dejado atrás la herramienta abismal de comparación de solicitudes de extracción en GitHub. Incluso puedo hacer ediciones a medida que avanzo, y cuando lo hago, ¡simplemente creo una nueva rama con "-code-review" anexado y comprometido!
kghastie
2
Funciona siempre que no haya conflictos de fusión y falla cuando hay conflictos de fusión.
Naga Kiran
1
¡Me gusta mucho ese enfoque! Además, al menos para mí git gui, muestra los conflictos como no escenificados, los no conflictos como escenificados, por lo que incluso obtienes una buena distinción. Me ayuda mucho más que la respuesta mejor calificada: D
DJGummikuh
55

En caso de que esté usando Intellij Idea IDE, puede usar la opción de comparación en la rama.

ingrese la descripción de la imagen aquí

Kamal Reddy
fuente
¿Hay alguna configuración / opciones / configuraciones para modificar esta comparación? (como --ignore-space-at-eol para git diff)
Superole
49

También puedes hacerlo fácilmente con gitk.

> gitk branch1 branch2

Primero haga clic en la punta de branch1. Ahora haga clic derecho en la punta de branch2 y seleccione Diff this-> selected.

Martín
fuente
77
Usar gitk branch1..branch2solo muestra confirmaciones entre las dos revisiones.
T3rm1
usando gitk (sin branch1 branch2) si desea ver todos los cambios que ha realizado en su sucursal.
mikewasmike
31

Para aquellos de ustedes en Windows que usan TortoiseGit, pueden obtener una comparación algo visual a través de esta característica bastante oscura:

  1. Navega a la carpeta que deseas comparar
  2. Mantenga presionado shifty haga clic derecho
  3. Vaya a TortoiseGit -> Buscar referencia
  4. Use ctrlpara seleccionar dos ramas para comparar
  5. Haga clic derecho en su selección y haga clic en "Comparar referencias seleccionadas"

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

Oversearch
fuente
¿Por qué deberías mantener presionado shift?
Zero3
1
Si mantiene presionada la tecla Mayús mientras hace clic derecho, siempre aparece el menú completo de TortoiseGit, en caso de que haya configurado TortoiseGit para que no muestre ciertos elementos.
Oversearch
Esto es asombroso Ojalá fuera una característica más destacada.
Dibujó el
22

Si está utilizando OSX o Windows 7+, Atlassian SourceTree funciona muy bien para esto. Es gratis.

Puede ver los cambios por etapas en una configuración de diferencias de lado a lado, y puede comparar fácilmente local con remoto y cualquier otra rama. Cuando se seleccionan varios archivos, la diferencia se muestra a continuación:

ingrese la descripción de la imagen aquí

Suponiendo que ha desprotegido una rama de características y desea ver el diferencial contra 'maestro', haga clic derecho en la rama 'maestro' y seleccione "Diferenciar contra corriente"

Desafortunadamente, no parece que esté disponible en distribuciones * nix en el corto plazo .

Jordan Parker
fuente
3
Puede ser 'gratuito', pero ciertamente requiere algo de tiempo para leer sus Términos de uso de registro: atlassian.com/legal/customer-agreement Hasta ahora me ha gustado la herramienta, pero esto puede estar alejándome.
akauppi
@akauppi ¿Qué partes te desaniman? Pensé que todos esos acuerdos eran más o menos lo mismo
alex
Eso fue hace más de un año. Sí, los acuerdos pueden ser similares, pero fue el proceso por el que SourceTree me empujó. Fue raro. Sin embargo, pasado. No tendré los detalles para ti. Lo sentimos
akauppi
16

Pruebe "difftool" (suponiendo que tenga configuradas las herramientas diff) - consulte https://www.kernel.org/pub/software/scm/git/docs/git-difftool.html

Creo que el estado del nombre es bueno para el resumen, pero difftool repetirá los cambios (y la -dopción le da la vista de directorio), por ejemplo

$ git difftool their-branch my-branch

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

O como @ rsilva4 mencionó con -dy por defecto a su rama actual, es solo, por ejemplo, comparar con master:

$  git difftool -d master..

... y sí, hay muchas variaciones: https://www.kernel.org/pub/software/scm/git/docs/git-reset.html

Paul Kohler
fuente
3
Gracias, esto fue útil. Agregar la opción -d mejorará aún más las cosas:git difftool -d their-abc my-abc
rsilva4
Dado que explicahell.com no parece poder analizar la opción -d en este momento, esto es lo que dice la página de -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.
manual
8

Si está usando github, puede usar el sitio web para esto:

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

Eso te mostrará una comparación de los dos.

Arron
fuente
Esto funciona (lo hago todo el tiempo) pero requiere que empuje su código al repositorio de Github. Sin embargo, eso no es realmente una advertencia aceptable en mi opinión.
adamwong246
2
o simplemente github.com/url/to/your/repo/compare/y luego puedes seleccionar las ramas
caramba
¿Y cómo consigo ese SHA? Quiero decir, ¿qué significa SHA de la punta de una rama?
Optimus Prime
8

En GitExtensions puede seleccionar ambas ramas en la cuadrícula de revisión con Ctrlpresionado. Luego puede ver los archivos que difieren entre esas ramas. Cuando seleccione un archivo, verá diff para él.

Tomado de aquí

Mahmoodvcs
fuente
Tengo 2 ramas seleccionadas en mi cuadrícula de revisión, pero no veo ningún comando de comparación en el menú en la parte superior o cuando hago un clic derecho.
Eric
1
Lo encontré en los encabezados del panel inferior. Hay commit, árbol de archivos y diferencia.
Eric
7

ACTUALIZAR

Mac: ahora uso SourceTree. Completamente recomendado. Especialmente me gusta la forma en que puedes poner en escena a los tíos.

Linux: he tenido éxito con:

  • smartgit
  • GitKraken
  • meld

Por ejemplo, para instalar smartgiten Ubuntu:


Esto hace el trabajo:

git-diffall con una herramienta GUI diff como meld. Ver punto 5 aquí:

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

Hay una buena publicación sobre git and meld aquí: http://nathanhoad.net/how-to-meld-for-git-diffs-in-ubuntu-hardy

Snowcrash
fuente
4

Si usa Eclipse, puede comparar visualmente su rama actual en el espacio de trabajo con otra etiqueta / rama:

Comparación del espacio de trabajo de Eclipse

Alessandro Dionisi
fuente
Personalmente, encuentro que el soporte de Eclipse para diferir por debajo del par, pero si eso es todo lo que tienes, entonces está bien.
ysap
4

Puede usar el P4Merge gratuito de Perforce para hacer esto también:

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

ingrese la descripción de la imagen aquí

Los detalles sobre su integración con Git se pueden encontrar aquí y aquí.

pero un resumen rápido de los enlaces anteriores es:

  • Ponga los siguientes bits en su ~ / .gitconfig, y luego puede hacer $ git mergetooly $ git difftoolusar p4merge
  • Tenga en cuenta que $ git diffsolo usará el visor de diferencias en línea predeterminado :) (probado con git versión 1.8.2)

Cambios 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
fuente
2

Si usa el excelente editor de WebStorm, puede compararlo con cualquier rama que desee: Webstorm git compare

Nico
fuente
En realidad, me acabo de dar cuenta de que IntelliJ IDEA (presumiblemente también WebStorm) tiene la capacidad de "resaltar los compromisos no seleccionados", lo que deja muy claro qué compromisos existen en la rama pero no en otros.
arthurakay
Sí, acabo de usar intellij para eliminar selectivamente un montón de cambios realizados en un repositorio mediante "autoformato al guardar". Fue muy fácil ... Tuve que encontrar la opción "Comparar antes con local" para hacerlo
Tom H
1

Mira esto git show-branch

Hay muchas cosas que puede hacer con la funcionalidad core git. Puede ser bueno especificar qué le gustaría incluir en su diferencia visual. La mayoría de las respuestas se centran en diferencias línea por línea de confirmaciones, donde su ejemplo se centra en los nombres de los archivos afectados en una confirmación determinada.

Una imagen que parece no abordarse es cómo ver las confirmaciones que contienen las ramas (ya sea en común o de manera única).

Para este visual, soy un gran admirador de git show-branch; muestra una tabla bien organizada de confirmaciones por rama de regreso al antepasado común. - para probarlo en un repositorio con múltiples ramas con divergencias, simplemente escriba git show-branchy verifique la salida - para una revisión con ejemplos, consulte Comparar confirmaciones entre ramas de Git

Kay V
fuente
0

Aquí le mostramos cómo ver la diferencia visual entre confirmaciones completas, a diferencia de los archivos individuales, en Visual Studio (probado en VS 2017). Desafortunadamente, solo funciona para confirmaciones dentro de una rama: en el "Explorador del equipo", elija la vista "Ramas", haga clic con el botón derecho en el repositorio y elija "Ver historial" como en la siguiente imagen.

ingrese la descripción de la imagen aquí

Luego, el historial de la rama actual aparece en el área principal. (Cuando las ramas que terminaron como confirmaciones anteriores en la rama actual están marcadas con etiquetas). Ahora seleccione un par de confirmaciones con Ctrl-Izquierda, luego haga clic derecho y seleccione "Comparar confirmaciones ..." en el menú emergente.

Para obtener más información sobre la comparación de sucursales en el mundo de Microsoft, consulte esta pregunta de stackoverflow: diferencias entre las sucursales de git con Visual Studio .

Carsten Führmann
fuente
1
Muestra solo el historial de una sola rama, por lo que no se puede comparar entre ramas.
Michał Fita