578 votos

Git: cómo combinar mi local, el trabajo se transforma en otra sucursal

¿Cómo puedo hacer esto en git:

Mi rama es branch1 y yo hemos hecho algunos cambios locales. Sin embargo ahora me doy cuenta de que en realidad el objetivo de aplicar estos cambios a branch2. Hay una manera de aplicar/combinación de estos cambios, de modo que se conviertan en cambios locales en branch2 sin cometer ellos en branch1?

843voto

VonC Puntos 414372

Dado que los archivos no se han cometido en branch1:

git stash
git checkout branch2
git stash pop

o

git stash
git checkout branch2
git stash list       # to check the various stash made in different branch
git stash apply x    # to select the right one

82voto

Charles Bailey Puntos 244082

Esconder, temporal se compromete y reorganizando todo puede ser una exageración. Si no has añadido los archivos modificados en el índice, sin embargo, entonces usted puede ser capaz de obtener el otro brazo.

git checkout branch2

Esta voluntad de trabajo, siempre y cuando no hay ningún archivo que se está editando son diferentes entre branch1 y branch2. Te dejará en branch2 con usted trabajando cambios en conserva. Si son diferentes, a continuación, puede especificar que desea combinar sus cambios locales con los cambios introducidos por el cambio de las ramas con el -m opción a compra.

git checkout -m branch2

Si has añadido cambios en el índice, a continuación, usted querrá deshacer estos cambios con un reset en primer lugar. (Esto para conservar su copia de trabajo, se acaba de quitar de la puesta en escena cambios.)

git reset

2voto

vladkornea Puntos 95

Las respuestas dadas hasta el momento no son ideales, ya que requieren una gran cantidad de trabajo innecesario resolver conflictos, o que hacer demasiadas suposiciones que son con frecuencia falso. Esto es cómo hacerlo perfectamente. El enlace es a mi propio sitio.

Cómo Comprometerse a una Rama Diferente en git

Usted tiene uncommited cambios en my_branch que desea comprometerse a master, sin el compromiso de todos los cambios de my_branch.

Ejemplo

git merge master
git stash -u
git checkout master
git stash apply
git reset
git add example.js
git commit
git checkout .
git clean -f -d
git checkout my_branch
git merge master
git stash pop

Explicación

Empezar por la fusión master en su rama, ya que tendrás que hacer que, finalmente, de todos modos, y ahora es el mejor momento para resolver cualquier tipo de conflicto.

La -u opción (aka --include-untracked) en git stash -u evita perder sin marcas de tránsito archivos cuando, más adelante, hacer git clean -f -d dentro master.

Después git checkout master es importante que usted NO git stash pop, puesto que se necesitan este tipo de imágenes más tarde. Si el pop, el alijo creado en my_branch y, a continuación, haga git stash en master, que hará innecesario conflictos cuando posteriormente aplicar que stash en my_branch.

git reset unstages todo lo que resulte de git stash apply. Por ejemplo, los archivos que han sido modificados en el almacen, pero no existen en master se realizaron como "eliminado" para nosotros " los conflictos.

git checkout . y git clean -f -d desechar todo lo que no está comprometido: todos los cambios de seguimiento de archivos, y todas sin marcas de tránsito de archivos y directorios. Ya están guardados en el alijo y si a la izquierda en master haría innecesario conflictos cuando vuelve a my_branch.

La última git stash pop estará basado en el original my_branch, y así no causará ningún tipo de conflictos. Sin embargo, si su escondite sin marcas de tránsito contiene los archivos que se han comprometido a maestro, git se quejan de que "no se Puede restaurar sin marcas de tránsito archivos de stash". Para resolver este conflicto, eliminar los archivos de tu directorio de trabajo, a continuación, git stash pop, git add .y git reset.

2voto

claf Puntos 3425

Si se tratara acerca de los cambios confirmados, usted debe tener una mirada en git rebase, pero como se señaló en el comentario por VonC, como estamos hablando de los cambios locales, git stash sin duda sería una buena manera de hacer esto.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X