2011-10-08 13 views
8

Mi flujo de trabajo:¿Alguna guía para git merge (w squash)?

  • rama de maestro
  • trabajo en mi rama, cometen con frecuencia (más de 100)
  • cuando el trabajo se hace en mi rama, combinación maestra en mi rama, resolver todos los conflicto.
  • CÓDIGO tiempo de revisión antes de la fusión de nuevo a dominar

Para revisión de código, necesito mostrar las diferencias entre dos cabezas y calabaza/organizar mis compromete (en unos 5 commit). ¿Cuál es la mejor GUI (multiplataforma?) Para esta tarea.

+1

Sospecho que no necesita mostrar las diferencias entre las dos ramas, porque si se realizan más commits en el maestro entre la fusión y la revisión, le gustaría que se excluyan. Probablemente sea mejor mostrar solo los cambios introducidos en su sucursal, excluyendo cualquier cambio introducido en el maestro. Luego puede fusionar en cualquier momento, en lugar de tener que hacerlo inmediatamente antes de revisar. –

Respuesta

9

Depende de su sistema operativo (git Tower, en MacOs solo por ejemplo, es una GUI fina particular pero no ofrece ninguna característica particular para una rebase interactiva). On Windows, there doesn't seem to be any GUI para esa característica.

La forma más fácil sigue siendo uno que no implica interfaz, donde se puede ejecutar un

git rebase --interactive --autosquash 

porque usted comprometido con el mensaje del informe comienza con! Calabaza (cuando esas confirmaciones intermedios eran aproximadamente la misma tarea)
Ver " Trimming GIT Checkins/Squashing GIT History ".

+0

¿Este comando está aplastando permanentemente las confirmaciones juntas en el historial del proyecto, o simplemente las muestra de esa manera para fines de revisión? –

+1

@JonathanHartley Va a aplastar las confirmaciones, pero puede restablecer una vez que no tenga la necesidad de esa confirmación aplastada. – VonC

0

En Linux, mis dos GUI favoritas para git son gitg y meld. Para obtener la diferencia correcta para la revisión del código en su caso, ejecute gitg y encuentre la última confirmación en el maestro de la que se fusionó (lo que es importante, no quiere diferir del jefe maestro actual en caso de que el maestro haya avanzado desde la última vez que se fusionó) Copia este SHA1 y ponerlo en su git difftool:

git difftool -t meld <SHA1> 

Para configurarlo de modo que usted no tiene que especificar funden como el difftool cada vez, acaba de establecer en la configuración:

git config --global diff.tool meld 
0

Eclipse puede hacer la parte de comparación. Puede hacer clic derecho en el proyecto y seleccionar

Team->Advanced->Synchronize With...->(branch you want to compare against) 

Esto le muestra la diferencia entre las 2 ramas. Sin embargo, ni git ni ninguna GUI de git que conozco admiten ataques de aplastamiento que en mi humilde opinión es demasiado malo.

Así que terminan haciendo un (caso en el que tuve 3 confirmaciones que quiero calabaza)

git rebase --interactive HEAD~3 

.

2

La salida de cualquier comando 'git diff' se puede mostrar en una herramienta de GUI utilizando el comando 'git difftool'.

En primer lugar, el comando 'diff' queremos: Muestra los diferenciales acumulados introducidas por cada comprometen en 'MyBranch' ya que se separaron de 'maestro' usando:

git diff master...mybranch 

o

git diff master...HEAD 

Tenga en cuenta que esto excluye cualquier compromiso que haya sucedido en el maestro mientras tanto, que es probablemente lo que desea si está revisando mybranch.

Si MyBranch es su actual jefe, entonces esto puede abreviarse:

git diff master... 

Git alimentará la salida de los comandos diff en uno de una lista de cerca de ocho herramientas GUI conocidos, usando 'difftool git'. Uso kdiff3 en OSX, y en el pasado lo he usado felizmente en Linux también. Prefiero kdiff3 porque me permite hacer combinaciones de 3 vías cuando es necesario, y me permite editar manualmente la salida de la combinación, así como simplemente seleccionar los bloqueos que se utilizarán.

Primero instale kdiff3, luego agregue un enlace simbólico a él en su RUTA. Para mí, eso era:

ln -s /Applications/kdiff3.app/Contents/MacOS/kdiff3 /usr/local/bin/kdiff3 

luego decirle a Git que desea utilizar kdiff3 como su GUI herramienta de diferencias:

git config --global merge.tool kdiff3 

a continuación, ver sus diferenciaciones en ella:

git difftool master...