Enviar confirmaciones a otra rama


¿Es posible confirmar y enviar cambios de una rama a otra?

Asumo que cometí cambios en BRANCH1y quiero empujarlos a BRANCH2.

Desde RAMA1 , ¿es válido hacer:

git push origin **BRANCH2**

Y luego restablecer BRANCH1?

 235
git
Author: iwasrobbed, 2012-12-16

3 answers

Eso casi funcionará.

Al empujar a una rama no predeterminada, debe especificar la ref de origen y la ref de destino:

git push origin branch1:branch2

O

git push <remote> <branch with new changes>:<branch you are pushing to> 
 442
Author: SLaks,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-05-14 15:11:44

Ciertamente, aunque solo funcionará si es un avance rápido de la RAMA2 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 de manual de git push para más detalles sobre cómo funciona. También tenga en cuenta que tanto un force push como un reset son operaciones que "reescriben el historial", y no deben ser intentadas por los débiles de corazón a menos que esté absolutamente seguro de saber lo que está haciendo con respecto a los repositorios remotos y otras personas que tienen bifurcaciones / clones del mismo proyecto.

 52
Author: Ryan Stewart,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-04-14 14:14:50

En mi caso tuve un commit local, que no fue enviado a origin\master, sino a mi rama local master. Este commit local debería ser ahora empujado a otra rama.

Con Extensiones de Git puedes hacer algo como esto:

  • (Crear si no existe y) checkout nueva rama, donde desea empujar su commit.
  • Seleccione el commit del historial, que debería ser commiteado y enviado a esta rama.
  • Haga clic derecho y seleccione Cherry pick commit.
  • Presione el botón Cherry pick después.
  • El commit get seleccionado se aplica a tu rama checked out. Ahora comprométete y empújalo.
  • Echa un vistazo a tu rama antigua, con la confirmación defectuosa.
  • Reinicia esta rama a la penúltima confirmación, donde todo estaba bien (¡sé consciente de lo que estás haciendo aquí!). Puede hacerlo haciendo clic derecho en la penúltima confirmación y seleccionando Restablecer la rama actual a aquí. Confirmar la oportunidad, si sabes lo que estás haciendo.

También puedes hacerlo en la línea de comandos de GIT. Ejemplo copiado de David Christensen:

Creo que encontrarás git cherry-pick + git reset para ser mucho flujo de trabajo más rápido:

Usando su mismo escenario, con "feature" siendo la rama con el top - la mayoría de las confirmaciones son incorrectas, 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 observaré que esto funcionará también si no es el más alto commit; solo necesitas un commitish para que el argumento sea elegido, via:

git checkout master
git cherry-pick $sha1
git checkout feature
git rebase -i ... # whack the specific commit from the history

 1
Author: testing,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-21 11:22:35