Comprometerse seleccione cambia a otra rama y luego reanudar el trabajo en la rama actual?
-
28-09-2019 - |
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; -))
Solución
- confirmar los cambios que desea en
master
en su rama actual. - Stash sus cambios restantes
- Cambiar a rama
master
y el usogit cherry-pick
para mover los cambios enmaster
- Mover de nuevo a su pluma ramificación, y
rebase
(opcional) - 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