Crear una rama en Git a partir de otra rama

Tengo dos ramas: master y dev

Quiero crear una "rama de características" de la rama dev.

Actualmente en la rama dev, lo hago:

$ git checkout -b myfeature dev

... (algo de trabajo)

$ git commit -am "blablabla"
$ git push origin myfeature

Pero, después de visualizar mis ramas, tengo:

--**master**
------0-----0-----0-----0-----0
------------------------**dev**----**myfeature**

Es decir que la rama parece ff fusionada, y no entiendo por qué...

¿Qué estoy haciendo mal?

¿Puedes explicarme por favor cómo se bifurca desde otra rama y se empuja de nuevo al repositorio remoto para la rama de características?

Todo eso en un modelo de ramificación como el descrito aquí.

Solución

Si te gusta el método del enlace que has puesto, echa un vistazo a Git Flow.

Es un conjunto de scripts que creó para ese flujo de trabajo.

Pero para responder a tu pregunta:

$ git checkout -b myFeature dev

Crea la rama MyFeature fuera de dev. Haz tu trabajo y luego

$ git commit -am "Your message"

Ahora fusiona tus cambios a dev sin un avance rápido

$ git checkout dev
$ git merge --no-ff myFeature

Ahora empuje los cambios al servidor

$ git push origin dev
$ git push origin myFeature

Y lo verás como quieres.

Comentarios (13)

Si quieres crear una nueva rama a partir de cualquiera de las ramas existentes en Git, sólo tienes que seguir las opciones.

Primero cambie/compruebe la rama desde la que desea crear una nueva rama. Por ejemplo, si usted tiene las siguientes ramas como:

  • master
  • dev
  • branch1

Así que si quieres crear una nueva rama llamada "subrama_de_b1" bajo la rama llamada "rama1" sigue los pasos:

    1. Salga o cambie a "rama1".

      git checkout rama1

  1. Ahora crea tu nueva rama llamada "subrama_de_b1" bajo la "rama1" usando el siguiente comando.

     git checkout -b subrama_de_b1 rama1

    Lo anterior creará una nueva rama llamada subrama_de_b1 bajo la rama branch1 (ten en cuenta que branch1 en el comando anterior no es obligatorio ya que el HEAD está actualmente apuntando a ella, puedes precisarlo si estás en una rama diferente).

  2. Ahora, después de trabajar con la subramada_de_b1 puedes confirmar y enviar o fusionar localmente o remotamente.

[]

empujar la sub-rama_de_b1 a la remota

 git push origin subbranch_of_b1 
Comentarios (7)

Trabajar simultáneamente en la rama dev. Lo que ocurre es que en tu escenario la rama feature se mueve hacia adelante desde la punta de la rama dev, pero la rama dev no cambia. Es más fácil de dibujar como una línea recta, porque se puede pensar en el movimiento hacia adelante. Has llegado al punto A en dev, y desde ahí simplemente has continuado en un camino paralelo. Las dos ramas no se han separado realmente.

Ahora, si haces un commit en dev, antes de fusionar, volverás a empezar en el mismo commit, A, pero ahora las características irán a C y dev a B. Esto mostrará la división que estás tratando de visualizar, ya que las ramas ahora han divergido.

*-----*Dev-------*Feature

Versus

       /----*DevB
*-----*DevA
       \----*FeatureC
Comentarios (0)