Enviar un commit en dos ramas con Git


¿Cómo envio una confirmación en dos ramas?

No puedo usar "git push", porque entonces empuja a tres ramas, y solo quiero la confirmación en dos de ellas..

He probado un "git merge HEAD id commit id de la rama A A" en la rama B, pero luego toma todo de la rama A y se fusiona con la rama B. Solo quiero el último commit y no todo lo demás fusionado con la rama B.

Alguien sabe qué hacer?

Author: jww, 2010-10-26

2 answers

Respuesta corta

Puedes aplicar commit ya existente a otra rama usando cherry-pick comando, y luego empuje ambas ramas usando git push origin branchA branchB.


Por qué empujar un commit en dos ramas podría ser útil

Supongamos que tiene un repositorio con esta estructura:

A--B--C--D  ← master ← HEAD
      \--E  ← v1-release

Después de algún desarrollo (commits A, B, C) se lanzó el proyecto y se creó la rama v1-release (para que v1 pueda ser compatible con correcciones de errores y se pueda desarrollado en master). Commit E se utilizó para especificar la información de la versión (se agregaron notas de la versión, etc.). Commit D introdujo una nueva característica, que está prevista para la próxima versión y no debería aparecer en v1-release.

Ahora, si se encuentra un bug en v1-release, debe ser corregido en ambas ramas, para que los usuarios puedan continuar usando v1 y no aparezca en la próxima versión.

Después de corregir el error en master, el repositorio debería tener este aspecto:

A--B--C--D--F  ← master ← HEAD
      \--E     ← v1-release

Ahora commit F con un la corrección de error se debe aplicar a la rama v1-release.

Cómo hacerlo realmente

Los commits no se pueden copiar exactamente (ya que commit es un estado guardado en el directorio), pero puede aplicar los cambios realizados en commit a otro commit.

cherry-pick el comando hace exactamente eso. Aplica los cambios realizados por un commit especificado a la rama actual, creando un nuevo commit:

git checkout v1-release
git cherry-pick F

Después de esto, el repositorio debería tener este aspecto:

A--B--C--D--F  ← master
      \--E--G  ← v1-release ← HEAD

Commit G introduce los mismos cambios que F.

Es posible que tenga que resolver conflictos (exactamente como después de la fusión).

Mensaje de error

El cherry pick anterior ahora estaba vacío ...

Significa que los cambios realizados por commit seleccionados ya están presentes en la rama actual. Probablemente se olvidó de pagar rama correcta.

En caso de errores o conflictos, el cherry-pick puede ser abortado usando git cherry-pick --abort.

Finalmente, puede volver a master rama y empujar ambas ramas a repositorio remoto:

git checkout master
git push origin master v1-release

Estructura final del repositorio:

A--B--C--D--F  ← master ← HEAD
      \--E--G  ← v1-release
 85
Author: max,
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
2016-03-29 23:09:22

Prueba esto:

git push origin <commitId>:<brancnName_1>
git push origin <commitId>:<brancnName_2>

Funciona de mi lado.

 2
Author: dakangz,
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
2016-12-27 09:14:03