git - remotas - ver diferencias entre commits
Ver las diferencias de ramas con meld? (8)
Sé que puedo ver la diferencia entre HEAD 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 nuevamente
git clone url
- Cambiar a la rama de
devel
cd projectA && git -b devel origin/devel
- Ver las diferencias con meld
meld /projectA_Master projectA
¿No hay una manera más fácil de obtener el mismo resultado en meld? Solo lo necesito para revisar los cambios y no principalmente para la fusión.
Aunque por las otras respuestas parece que no hay forma de hacerlo directamente en el repositorio de git en este momento, es fácil (gracias a la respuesta a otra pregunta :)) escribir un script que extraiga los árboles de dos confirmaciones a directorios temporales y ejecute meld en ellos, eliminando ambos directorios cuando meld exits:
Por supuesto, perderá cualquier cambio realizado a través de Meld, pero es bastante bueno para una visión general rápida de las diferencias, creo.
Comenzando con git v1.7.11, puede usar git difftool --dir-diff
para realizar una diferencia de directorio. Que funciona bastante bien con Meld sin https://github.com/wmanley/git-meld scripts.
Configurar git
git config --global diff.tool meld
Úselo
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
Corto y dulce:
git config --global diff.tool meld
Esto configura a Git para usar meld
como la herramienta diff. (No es necesario especificar los argumentos de la línea de comandos, el soporte para meld
está integrado en Git).
Entonces, si quieres una diferencia gráfica en lugar de una textual, simplemente git difftool
lugar de git diff
(ambos toman los mismos argumentos). En tu caso:
git difftool master..devel
Actualización: si no quiere el diff de un archivo por vez, sino que quiere usar la vista de "subdirectorio" de --dir-diff
con todos los cambios entre las dos ramas, tenga en cuenta la opción -d
o --dir-diff
para git difftool
. Por ejemplo, cuando estoy en la rama XYZ y quiero ver qué hay de diferente entre esta y la rama ABC, ejecuto esto:
git difftool -d ABC
Creo que una forma fácil de hacerlo es usar git reset --soft
:
Objetivo: comparar 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 puedes comparar dos commits sin la línea de comando:
Debe configurar en las opciones de edición ''git gui'', global: "Usar herramienta de combinación: fusionar".
Inicie gitk , seleccione una confirmación, haga clic con el botón secundario en otra confirmación> " diff this -> selected ". Debajo de ''parche'', haga clic derecho en un archivo> " diff externo ".
meld se iniciará y mostrará el still selected, primer commit en el lado derecho.
Es importante decir que al usar git difftool -d
aún puede editar sus archivos de trabajo en Meld y guardarlos . Para lograr eso, necesita comparar alguna rama con su árbol de trabajo actual, por ejemplo:
git difftool -d branchname
Meld mostrará que los directorios izquierdo y derecho 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). Entonces puede editarlos directamente en Meld y cuando los guarde, sus cambios se guardarán en su directorio de trabajo.
Sin embargo, la opción más interesante es la comparación del directorio de trabajo actual con el escondite. Puedes hacerlo simplemente escribiendo:
git difftool -d stash
A continuación, puede transferir algunos cambios del alijo (ventana izquierda) a su copia de trabajo actual (ventana derecha), sin usar git stash pop/apply
y evitar la molesta resolución del conflicto que pueden inducir estos comandos.
Creo que puede aumentar significativamente el flujo de trabajo con stashes. Puede transferir gradualmente los cambios del escondite a la copia de trabajo y confirmarlos uno por uno, introduciendo algunos otros cambios si lo desea.
Si tiene un directorio de trabajo limpio e índice limpio (o no le importa) entonces esto es lo que quiere:
git diff master..devel | patch -p1 && meld . && git reset --hard
También encontré este problema molesto, así que hice git meld, que permite una forma más cómoda de diferir los commit arbitrarios contra el árbol de trabajo o el área de ensayo. Puede encontrarlo en https://github.com/wmanley/git-meld . Es un poco como el guión de Mark, pero funciona para comparar cualquier compromiso arbitrario o el área de ensayo o el directorio de trabajo contra cualquiera de los otros. Si una de las cosas con las que compara es el árbol de trabajo, entonces también es de lectura y escritura para que no pierda sus cambios.