¿Es posible confirmar y empujar los cambios de una rama a otra?
Supongamos que he confirmado los cambios en BRANCH1 y quiero empujarlos a BRANCH2.
Desde BRANCH1, es válido hacer:
git push origin **BRANCH2**
¿Y luego reiniciar BRANCH1?
Eso casi funcionará.
Cuando se empuja a una rama no predeterminada, es necesario especificar la referencia de origen y la referencia de destino:
git push origin branch1:branch2
O
git push <remote> <branch with new changes>:<branch you are pushing to>
Ciertamente, aunque sólo funcionará si es un avance rápido de BRANCH2 o si lo fuerzas. La sintaxis correcta para hacer tal cosa es
git push <remote> <source branch>:<dest branch>
Vea la descripción de un "refspec" en la página git push man para más detalles sobre su funcionamiento. También hay que tener en cuenta que tanto un push forzado como un reset son operaciones que "reescriben la historia", y no debería'ser intentado por los débiles de corazón a menos que'estés absolutamente seguro de lo que estás haciendo con respecto a cualquier repositorio remoto y otras personas que tienen forks/clones del mismo proyecto.
En mi caso tenía un commit local, que no fue empujado a origin\master
, sino que fue enviado a mi rama local master
. Esta confirmación local debe ser empujado a otra rama.
Con Extensiones Git puedes hacer algo así:
También puedes hacerlo en la línea de comandos de GIT. Ejemplo copiado de David Christensen:
Creo que encontrarás que git cherry-pick
+ git reset
es un flujo de trabajo mucho más rápido.
flujo de trabajo más rápido:
Usando su mismo escenario, con "característica" siendo la rama con el el commit más alto es incorrecto, sería mucho más fácil hacer esto:
git checkout master
git cherry-pick feature
git checkout feature
git reset --hard HEAD^
Ahorra bastante trabajo, y es el escenario que
git cherry-pick
fue diseñado para manejar.También notaré que esto funcionará también si no es el más alto commit; sólo necesitas un commitish para el argumento a cherry-pick, a través de:
git checkout master
git cherry-pick $sha1
git checkout feature
git rebase -i ... # eliminar el commit específico del historial