2010-10-07 26 views
11

de casos de uso: cada vez que quiero mover comprometerse de una rama git a otro realizo la siguiente secuencia de acciones:Git: mover los cambios entre las ramas sin trabajar el cambio de directorio

  1. [comprometerse en la rama de trabajo]
  2. git checkoutrama-a-merge-en
  3. git cherry-pickmeta-commit
  4. git push
  5. git checkouttrabajo rama

que funciona bien con la única excepción - cada vez que realizo se cambia 'git checkout' git contenido de directorio de trabajo (espera) y que hace que mi IDE (IntelliJ IDEA) a realizar una actualización del estado interno (porque el subárbol del sistema de archivos supervisado se modifica externamente). Eso realmente molesta, especialmente en el caso de una gran cantidad de compromisos pequeños.

Veo dos maneras de ir:

  1. realizar la 'cereza' recoge la masa, es decir, llevar a cabo gran número de confirmaciones; moverlos a otra rama, por ejemplo, al final del día laborable;
  2. tienen un segundo repositorio de git local y realizan selecciones de cereza, es decir, cada vez que se realiza una confirmación y una inserción reales en la rama de trabajo, vaya a ese segundo repositorio, extraiga los cambios y realice la selección de cereza allí;

No me gusta el primer acercamiento porque es posible olvidarse de mover un compromiso particular. El segundo se ve un poco ... antinatural.

Básicamente, sería perfecto si pudiera decir git 'move this commit de branch con nombre branchX a branch branchX + 1' sin actualizar el directorio de trabajo.

Pregunta: ¿es posible realizar lo anterior?

+3

Opción 3: Indique a su editor que se interponga en su camino. – rafl

+1

¿Cómo te gustaría trabajar con un editor que no refleje los cambios de archivos externos? –

+0

debe cambiar el título de su pregunta real – cmcginty

Respuesta

1

Si no necesita fusionar sus cambios a menudo, en lugar de hacer cherry-pick, ¿qué le parece hacer de vez en cuando un git merge <working branch> desde su <branch to merge into>? Esto sería el equivalente a encuadrar todos los cambios desde la última vez que se fusionó, si no me equivoco (no hay riesgo de olvidar un compromiso, con este enfoque). De esta forma, el "problema del editor" ocurriría con menos frecuencia.

+0

Gracias por la sugerencia, pero por lo que entiendo, fusionar traerá no solo mis commits sino también todos los commits entre las ramas. Es decir. número de confirmaciones realizadas por mí y mis colegas, y quiero mover solo mis compromisos de destino a otra sucursal. –

+0

@ denis.zhdanov: veo lo que necesitas, ahora. No estoy seguro de cómo seleccionar automáticamente * sus * confirmaciones ... – EOL

7

No, no es posible mover una confirmación entre ramas sin cambiar el directorio de trabajo. Esto se debe a que eventualmente se encontrará con un conflicto, momento en el que git hace una pausa para que pueda solucionar el conflicto. Si su trabajo directamente no representa ese estado, entonces no podrá corregir los conflictos correctamente.

Si mira a su alrededor, encontrará muchas otras soluciones posibles para este problema en SO, pero el problema subyacente parece que su editor no maneja los archivos que se están cambiando debajo de él. Esto es básicamente un hecho de usar git. Por lo tanto, actualice el editor o muévase a algo más adecuado para un flujo de trabajo de git.

Cuestiones relacionadas