Ver las diferencias de twigs con meld?

Sé que puedo ver la diferencia entre HEAD y el estado actual con meld . . Pero, ¿cómo puedo ver las diferencias entre las twigs, por ejemplo, master y devel con meld?

Por el momento, hago los siguientes pasos:

  1. Cambiar el nombre de la carpeta de la copy de trabajo
    Por ejemplo mv /projectA /projectA_master )
  2. Clonar el proyecto nuevamente
    git clone url
  3. Cambiar a la twig de devel
    cd projectA && git -b devel origin/devel
  4. Ver las diferencias con meld
    meld /projectA_Master projectA

¿No hay una manera más fácil de get el mismo resultado en meld? Solo lo necesito para revisar los cambios y no principalmente para la fusión.

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 tree 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 directory de trabajo contra cualquiera de los otros. Si una de las cosas con las que compara es el tree de trabajo, entonces también es de lectura y escritura para que no pierda sus cambios.

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 arguments de la command-line, 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 arguments). En tu caso:

 git difftool master..devel 

Actualización: si no quiere el diff de un file por vez, sino que quiere usar la vista de "subdirectory" de --dir-diff con todos los cambios entre las dos twigs, tenga en count la opción -d o --dir-diff para git difftool . Por ejemplo, cuando estoy en la twig XYZ y quiero ver qué hay de diferente entre esta y la twig ABC, ejecuto esto:

 git difftool -d ABC 

Comenzando con git v1.7.11, puede usar git difftool --dir-diff para realizar una diferencia de directory. 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 

Es importante decir que al usar git difftool -d aún puede editar sus files de trabajo en Meld y savelos . Para lograr eso, necesita comparar alguna twig con su tree de trabajo actual, por ejemplo:

 git difftool -d branchname 

Meld mostrará que los directorys izquierdo y derecho se encuentran en / tmp. Sin embargo, los files en el directory correcto son en realidad enlaces simbólicos a sus files en el directory de trabajo actual (no se aplica a Windows). Entonces puede editarlos directamente en Meld y cuando los guarde, sus cambios se saveán en su directory de trabajo.

Sin embargo, la opción más interesante es la comparación del directory de trabajo actual con el escondite. Puedes hacerlo simplemente escribiendo:

 git difftool -d stash 

A continuación, puede transferir algunos cambios del alijo (window izquierda) a su copy de trabajo actual (window derecha), sin usar git stash pop/apply y evitar la molesta resolución del conflicto que pueden inducir estos commands.

Creo que puede boost significativamente el flujo de trabajo con stashes. Puede transferir gradualmente los cambios del escondite a la copy de trabajo y confirmarlos uno por uno, introduciendo algunos otros cambios si lo desea.

Aunque por las otras respuestas parece que no hay forma de hacerlo directamente en el repository de git en este momento, es fácil (gracias a la respuesta a otra pregunta :)) escribir un script que extraiga los treees de dos confirmaciones a directorys temporales y ejecute meld en ellos, eliminando ambos directorys cuando meld exits:

http://gist.github.com/498628

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.

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 command:

Debe configurar en las opciones de edición 'git gui', global: "Usar herramienta de combinación: fusionar".

Inicie gitk , select una confirmación, haga clic con el button secundario en otra confirmación> " diff this -> selected ". Debajo de 'parche', haga clic derecho en un file> " diff externo ".

meld se iniciará y mostrará el still selected, primer commit en el lado derecho.

Si tiene un directory 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