¿Ver diferencias de ramas con Meld?
Pregunta
Sé que puedo ver la diferencia entre la cabeza y el estado actual con meld .
. Pero, ¿cómo puedo ver las diferencias entre las ramas, por ejemplo? master
y devel
¿Con Meld?
Por el momento hago los siguientes pasos:
- Cambiar el nombre de la carpeta de la copia de trabajo
Por ejemplomv /projectA /projectA_master
) - Clonar el proyecto de nuevo
git clone url
- Cambiar a
devel
rama
cd projectA && git -b devel origin/devel
- Ver las diferencias con la melodía
meld /projectA_Master projectA
¿No hay una forma más fácil de obtener el mismo resultado en Meld? Solo necesito revisar los cambios y no principalmente para fusionar.
Solución
También encontré este problema molesto, así que he hecho Git Meld, lo que permite una forma más cómoda de difundir comodidades arbitrarias contra el árbol de trabajo o el área de puesta en escena. Puedes encontrarlo en https://github.com/wmanley/git-meld . Es un poco como el guión de Mark, pero funciona para comparar cualquier confirmación arbitraria o el área de puesta en escena o el directorio de trabajo con cualquiera de los demás. Si una de las cosas con las que se compara es el árbol de trabajo, entonces también es lectura-escritura para que no pierda sus cambios.
Otros consejos
Corto y dulce:
git config --global diff.tool meld
Esto configura git para usar meld
como la herramienta Diff. (No necesita especificar los argumentos de la línea de comando, soporte para meld
está integrado en git.)
Entonces, si desea una diferencia gráfica en lugar de una textual, simplemente invoca git difftool
en vez de git diff
(Ambos toman los mismos argumentos). En tu caso:
git difftool master..devel
ACTUALIZACIÓN: Si no desea el Diff de un archivo de un archivo, sino que desea usar la vista "Subdirectorio" de Meld con todos los cambios entre las dos ramas, tenga en cuenta las -d
o --dir-diff
opción para git difftool
. Por ejemplo, cuando estoy en Branch XYZ y quiero ver qué es diferente entre esto y la rama ABC, ejecuto esto:
git difftool -d ABC
Comenzando con Git V1.7.11, puede usar git difftool --dir-diff
Para realizar un directorio diff. Que funciona bastante bien con Meld Wihout https://github.com/wmanley/git-meld guiones.
Configurar git
git config --global diff.tool meld
Usarlo
git difftool -d topic // -d is --dir-diff
git difftool -d master..topic
Para macOS
brew cask install meld
git config --global difftool.meld.cmd 'open -W -a Meld --args \"$LOCAL\" \"$PWD/$REMOTE\"'
git config --global difftool.meld.trustExitCode true
Es importante decir que usar git difftool -d
tú todavía puede editar sus archivos de trabajo en Meld y sálvalos. Para lograr eso, debe comparar alguna rama con su árbol de trabajo actual, por ejemplo:
git difftool -d branchname
MELD mostrará que los directorios de izquierda y derecha se encuentran en /TMP. Sin embargo, los archivos en el directorio correcto son en realidad enlaces simbólicos a sus archivos en el directorio de trabajo actual (no se aplica a Windows). Por lo tanto, puede editarlos directamente en Meld y cuando los guarde sus cambios se guardarán en su Dir.
La opción aún más interesante es la comparación del Dir de trabajo actual con Stash. Puedes hacerlo simplemente escribiendo:
git difftool -d stash
Luego puede transferir algunos cambios desde el alijo (ventana izquierda) a su copia de trabajo actual (ventana derecha), sin usar git stash pop/apply
y evitando la resolución de conflictos molesto que puede ser inducida por estos comandos.
Creo que puede aumentar significativamente el flujo de trabajo con alojamientos. Puede transferir gradualmente los cambios de alojamiento a una copia de trabajo y cometerlos uno por uno, introduciendo otros cambios si lo desea.
Aunque parece de las otras respuestas como si no hubiera una manera de hacer esto directamente en el repositorio de Git en este momento, es fácil (gracias a la respuesta a otra pregunta :)) para escribir un script que extraiga los árboles de dos compromisos a los directorios temporales y ejecute Meld en ellos, eliminando ambos directorios cuando Meld sale:
Por supuesto, perderá cualquier cambio realizado a través de MELD, pero creo que es bastante bueno para una descripción general de las diferencias.
Creo que una manera fácil de hacer esto es usar git reset --soft
:
Objetivo: compare las diferencias entre Branch_A y Branch_B con Meld
git checkout branch_a
git checkout -b do_diff
git reset --soft branch_b
meld .
En GIT v1.7.9 puede comparar dos compromisos sin la línea de comandos:
Debe configurar en las opciones de edición 'GIT GUI', Global: "Usar la herramienta Merge: MELD".
comienzo gitk, seleccione una confirmación, haga clic con el botón derecho en otro compromiso> "Diff esto -> seleccionado". En 'Patch' haga clic derecho en un archivo>"Diff externo".
fustar Iniciará y mostrará la primera, primero se confirma en el lado derecho.