trucos tag sirven remota ramas rama que para name las como commits commands comentarios cambiar git branching-and-merging

git - tag - ¿Cómo copiar las confirmaciones de una rama a otra?



para que sirven las ramas git (6)

O si estás un poco menos del lado del evangelista, puedes hacer un poco feo de lo que estoy usando. En deploy_template hay confirmaciones que quiero copiar en mi maestro como despliegue de sucursal

git branch deploy deploy_template git checkout deploy git rebase master

Esto creará una nueva implementación de sucursal (yo uso -f para sobrescribir la rama de implementación existente) en deploy_template, y luego volveré a escribir esta nueva rama en el maestro, sin tener que desplegar deploy_template.

Tengo dos ramas de mi maestro:

  • v2.1 : (versión 2) He estado trabajando durante varios meses
  • wss : que creé ayer para agregar una característica específica a mi maestro (en producción)

¿Hay una manera de copiar los compromisos de ayer de wss a v2.1?


Para el simple caso de simplemente copiar la última confirmación de la rama wss a v2.1, simplemente puede capturar el ID de confirmación ( git log --oneline | head -n 1 ) y hacer:

git checkout v2.1 git merge <commit>



Realmente deberías tener un flujo de trabajo que te permita hacer todo esto combinando:

- x - x - x (v2) - x - x - x (v2.1) / x - x - x (wss)

Así que todo lo que tienes que hacer es git checkout v2.1 y git merge wss . Si por alguna razón realmente no puedes hacer esto, y no puedes usar git rebase para mover tu rama wss al lugar correcto, el comando para tomar un solo commit de algún lugar y aplicarlo en otro lugar es git cherry-pick . Simplemente revise la rama en la que desea aplicarlo y ejecute git cherry-pick <SHA of commit to cherry-pick> .

Algunas de las maneras en que rebase podría salvarte:

Si tu historia se ve así:

- x - x - x (v2) - x - x - x (v2.1) / x - x - x (v2-only) - x - x - x (wss)

Puede usar git rebase --onto v2 v2-only wss para mover wss directamente a v2:

- x - x - x (v2) - x - x - x (v2.1) |/ | x - x - x (v2-only) / x - x - x (wss)

¡Entonces puedes unirte! Si realmente, realmente, realmente no puede llegar al punto en que puede fusionarse, todavía puede usar rebase para hacer efectivamente varias selecciones de cereza a la vez:

# wss-starting-point is the SHA1/branch immediately before the first commit to rebase git branch wss-to-rebase wss git rebase --onto v2.1 wss-starting-point wss-to-rebase git checkout v2.1 git merge wss-to-rebase

Nota: la razón por la que se necesita algo de trabajo adicional para hacer esto es que está creando confirmaciones duplicadas en su repositorio. Esto no es realmente algo bueno, el objetivo de la fácil ramificación y fusión es poder hacer todo al hacer de los compromisos un lugar y fusionarlos en donde sea necesario. Las confirmaciones duplicadas significan una intención de nunca fusionar esas dos ramas (si decide que desea hacerlo más adelante, obtendrá conflictos).


Utilizar

git cherry-pick <commit>

para aplicar <commit> a tu rama actual .

Probablemente yo mismo verificaría las confirmaciones que selecciono en gitk y las seleccioné con un clic derecho en la entrada de confirmación.

Si desea ir de forma más automática (con todos sus peligros) y suponiendo que todas las confirmaciones desde ayer ocurrieron en wss, podría generar la lista de confirmaciones usando el git log con (- --pretty sugerido por Jefromi)

git log --reverse --since=yesterday --pretty=%H

así que todo junto asumiendo que usas bash

for commit in $(git log --reverse --since=yesterday --pretty=%H); do git cherry-pick $commit done

Si algo sale mal aquí (hay un gran potencial), está en problemas, ya que esto funciona en el checkout en vivo, por lo que puede hacer selecciones automáticas o usar rebase como lo sugiere Jefromi.


git cherry-pick : aplique los cambios introducidos por algunas confirmaciones existentes

Supongamos que tenemos la rama A con (X, Y, Z) confirmaciones. Necesitamos agregar estos compromisos a la rama B. Vamos a utilizar las operaciones de cherry-pick .

Cuando usamos cherry-pick , deberíamos agregar confirmaciones en la rama B en el mismo orden cronológico que las confirmaciones aparecen en la Sucursal A.

cherry-pick admite un rango de confirmaciones, pero si tiene unir combinaciones en ese rango, se vuelve realmente complicado

git checkout B git cherry-pick SHA-COMMIT-X git cherry-pick SHA-COMMIT-Y git cherry-pick SHA-COMMIT-Z

Ejemplo de flujo de trabajo:

Podemos usar cherry-pick con options

-e o --edit : Con esta opción, git cherry-pick le permitirá editar el mensaje de confirmación antes de confirmar.

-n o --no-commit : Por lo general, el comando crea automáticamente una secuencia de confirmaciones. Este indicador aplica los cambios necesarios para seleccionar cada compromiso con nombre en su árbol de trabajo y en el índice, sin realizar ningún compromiso. Además, cuando se usa esta opción, su índice no tiene que coincidir con la confirmación HEAD. La selección de cereza se realiza contra el estado inicial de su índice.

Aquí un article interesante sobre cherry-pick .