Pregunta

Tengo dos ramas de mi maestro:

  • 2.1 : (versión 2) He estado trabajando durante varios meses
  • WSS que creé ayer para añadir una característica específica de mi maestro (en producción)

¿Hay alguna forma de copiar confirmaciones de ayer de WSS a v2.1?

¿Fue útil?

Solución

Usted debe realmente tener un flujo de trabajo que le permite hacer todo esto mediante la fusión:

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

Así que todo lo que tiene que hacer es git checkout v2.1 y git merge wss. Si por alguna razón usted realmente no puede hacer esto, y no se puede utilizar git rebase para mover su rama WSS al lugar correcto, el comando para agarrar una única confirmación de alguna parte y lo aplican en otros lugares es git cherry-pick . Sólo echa un vistazo a la rama que desea aplicarlo sobre, y ejecutar git cherry-pick <SHA of commit to cherry-pick>.

Algunas de las formas rebase podría ahorrar:

Si su historia es el siguiente:

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

Se puede usar para mover git rebase --onto v2 v2-only wss WSS directamente sobre v2:

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

A continuación, puede combinar! Si realmente, realmente, realmente no puede llegar al punto donde se puede fusionar, todavía se puede utilizar de manera efectiva rebase hacer varias cereza-picks 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 de que se necesita algo de trabajo extra con el fin de hacer esto es que se está creando duplicado se compromete en su repositorio. Esto no es realmente una buena cosa - el punto central de fácil ramas y la mezcla es ser capaz de hacer todo al hacer commit (s) solo lugar y su fusión en donde se necesitan. Duplicar compromete significa una intención nunca mezcle ambas ramas (si usted decide que quiere más tarde, obtendrá los conflictos).

Otros consejos

Uso

git cherry-pick <commit>

para aplicar <commit> a su rama actual .

Yo mismo probablemente una verificación cruzada de las confirmaciones que recojo en gitk y les cereza escoger con el clic derecho en la entrada comprometerse en su lugar.


Si quieres ir más automático (con todos sus peligros) y suponiendo que todos los envíos desde ayer ocurrió el WSS que podría generar la lista de confirmaciones utilizando git log con (--pretty sugerido por Jefromi)

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

así que todo junto suponiendo que el uso bash

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

Si algo va mal aquí (hay un montón de potencial) que está en problemas ya que esto funciona en la caja en vivo, así que o lo hacen de cereza-picks manuales o usar rebase como sugerido por Jefromi.

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

Asumamos que tenemos rama A con (X, Y, Z) comete. Tenemos que añadir estas confirmaciones en rama B . Vamos a utilizar las operaciones cherry-pick.

Cuando usamos cherry-pick, hay que añadir compromete en la rama B en el mismo orden cronológico que las confirmaciones aparecen en la rama .

cherry-pick es compatible con una amplia gama de confirmaciones, pero si usted tiene fusionar compromete en ese rango, se pone muy 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:

 introducir descripción de la imagen aquí

Podemos utilizar cherry-pick con opciones rel="noreferrer">

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

-n o --no-commit : Por lo general, el comando crea automáticamente una secuencia de confirmaciones. Esta bandera se aplica los cambios necesarios para la cereza-escoge cada uno el nombre comprometerse con su árbol de trabajo y el índice, sin hacer ningún commit. Además, cuando se utiliza esta opción, el índice no tiene que coincidir con la CABEZA cometió. La cereza-Pick se realiza contra el estado inicial de su índice.

A continuación, una interesante href="https://blog.founddrama.net/2013/07/git-cherry-pick/comment-page-1/" relativo cherry-pick.

crear un parche de las confirmaciones que desea copiar y aplicar el parche a la rama de destino.

o si está poco menos en el lado del evangelista se puede hacer un poco más fea que estoy usando. En deploy_template hay confirmaciones quiero copiar en mi maestro como desplegar la rama

git branch deploy deploy_template
git checkout deploy
git rebase master

Esto creará nueva rama de despliegue (utilizo -f para sobrescribir existente desplegar rama) en deploy_template, entonces rebase esta nueva rama en maestro, dejando intacta deploy_template.

En el caso simple de sólo copiar la última confirmación de rama WSS a v2.1, sólo tiene que agarrar el id comprometerse (git log --oneline | head -n 1) y hacer:

git checkout v2.1
git merge <commit>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top