Comprometerse seleccione cambia a otra rama y luego reanudar el trabajo en la rama actual?

StackOverflow https://stackoverflow.com/questions/3871512

Pregunta

Esto sucede a menudo en mi flujo de trabajo: Estoy trabajando en una característica en una rama separada, y al hacer esto voy a venir a través de las pequeñas cosas que hay que arreglar, pero son de más arriba en el marco o el diseño del sitio, por ejemplo, .

Quiero volver a la principal desarrollar rama y confirma los cambios de archivos seleccione allí, a continuación, volver a un característica rama, y ??rebase de modo que pueda continuar allí con los ajustes no relacionados / correcciones de errores fuera del camino.

Estoy usando git stash y git stash pop para hacer esto, pero estoy recibiendo una gran cantidad de conflictos a partir de un montón de archivos que Modifed pero no necesitan estar comprometidos con la rama principal de todos modos.

¿Hay otra manera de evitar o conflictos de alguna manera guardar el estado actual, y sólo tire seleccione cambios en el árbol de trabajo a otra rama por cometer? (Algo así como git-caleta-cereza-Pick; -))

¿Fue útil?

Solución

  1. confirmar los cambios que desea en master en su rama actual.
  2. Stash sus cambios restantes
  3. Cambiar a rama master y el uso git cherry-pick para mover los cambios en master
  4. Mover de nuevo a su pluma ramificación, y rebase (opcional)
  5. Unstash los cambios de características originales

Otros consejos

Usualmente lo hago al revés. Sigo trabajando en mi rama de la característica hasta que esté listo para hacer un commit allí. Tan pronto como soy, puedo añadir todos los cambios que pertenecen a la nueva comprometerse para la rama en el índice, pero no los que pertenecen al maestro. git add -p maquillaje et.al que realmente fácil. Una vez que todos los cambios pertinentes en el índice, encomiendo a la rama. Todos los restantes que quedan sucias cambios pertenecen al amo y se llevarán a lo largo de bien, una vez que me cambio a lo que puedo cometer allí.

Trate de cambiar de nuevo a la rama master utilizando la opción --merge. Se tratará de hacer una fusión a tres bandas entre las dos ramas. La documentación Git tiene un buen ejemplo:

2. After working in the wrong branch, switching to the correct
   branch would be done using:

      $ git checkout mytopic

   However, your "wrong" branch and correct "mytopic" branch
   may differ in files that you have modified locally, in which 
   case the above checkout would fail like this:

      $ git checkout mytopic
      error: You have local changes to 'frotz'; not switching branches.

   You can give the -m flag to the command, which would try a
   three-way merge:

      $ git checkout -m mytopic
      Auto-merging frotz

   After this three-way merge, the local modifications are not
   registered in your index file, so git diff would show you what
   changes you made since the tip of the new branch.

En MacOS, GitX hace que sea muy fácil de hacer el tipo de cometer selectiva rafl describe, de manera que de una buena manera de acercarse a ella si ese es el entorno en el que se encuentre.

También es posible / práctico para cometer cambios de la rama-y y cambios maestros-y en confirmaciones separadas, a continuación, utilizar git format-patch exportar las confirmaciones de la rama como archivos y git am para tirar de ellos en al maestro.

El peligro aquí es que si los archivos en torno a los cambios son demasiado diferentes, en cuyo caso puede haber conflictos cuando se tira de las confirmaciones para el maestro.

¿Qué pasa con la creación de una rama temporal?

Algo así como:

- oh crap need to do somethning else now
- git checkout -b ResumeLater
- git add .
- git commit
- git checkout ImportantStuff
- ....
- git checkout ResumeLater
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top