2010-12-17 16 views
501

Tengo dos ramas: maestros y devCrear una sucursal en Git de otra rama

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

Actualmente en el dev rama, que hago:

$ git checkout -b myfeature dev 

... (un trabajo)

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

Pero, después de la visualización de mis ramas, que tengo:

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

Quiero decir que la rama parece fusionarse, y no entiendo por qué ...

¿Qué estoy haciendo mal?

¿Puede explicarme cómo se ramifica desde otra sucursal y lo retrotrae al repositorio remoto para la rama de características?

Todo eso en un modelo de bifurcación como the one described here.

+9

lo encontrará mucho más fácil de dibujar en c bloques de oda (sangría cuatro espacios, o use el botón 101010, o ctrl-k) que en las comillas de bloque. Un ejemplo al azar: http://stackoverflow.com/questions/2474353/how-to-copy-commits-from-one-branch-to-another/2474371#2474371 – Cascabel

Respuesta

731

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

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

Pero para responder a su pregunta:

$ git checkout -b myFeature dev 

Crea dev MyFeature se ramifican. Hacer su trabajo y luego

$ git commit -am "Your message" 

Ahora fusionar los cambios en dev sin un avance rápido

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

edición

Ahora empuje cambios en el servidor

$ git push origin dev 
$ git push origin myFeature 

Y lo verás como lo quieres.

+0

Gracias por su respuesta;) Hice lo mismo (sin combinar aún) Después de mirar el código fuente de Git Flow es más o menos lo mismo ... No entiendo por qué cuando creo mi rama de características, la comprometo y presiono (remota), la rama parece fusionarse cuando visualizo todo mis ramas – revohsalf

+0

Porque está empujando la rama myFeature al servidor, y muestra que ha salido de la rama de desarrollo. No hay fusiones. Mi ejemplo se fusiona con la rama dev y empuja esa rama fusionada al servidor. – Abizern

+0

He actualizado mi respuesta. – Abizern

9

Haga el trabajo simultáneo en la rama dev. Lo que sucede es que en su escenario la rama de características se mueve hacia adelante desde la punta de la rama de desarrollo, pero la rama de desarrollo no cambia. Es más fácil dibujar como una línea recta, porque puede considerarse como un movimiento hacia adelante. Llegaste al punto A en el desarrollo, y desde allí simplemente continuaste en un camino paralelo. Las dos ramas en realidad no divergieron.

Ahora, si realiza un commit en dev, antes de la fusión, comenzará de nuevo en el mismo commit, A, pero ahora las funciones irán a C y dev a B. Esto mostrará la división que está tratando de visualizar , como las ramas ahora han divergido.

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

Versus

 /----*DevB 
*-----*DevA 
     \----*FeatureC 
170

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

Primero cambie/ingrese en la sucursal desde donde desea crear una nueva sucursal. Por ejemplo, si usted tiene las siguientes ramas como:

  • maestro
  • dev
  • BRANCH1

lo tanto, si desea crear una nueva rama llamada "subbranch_of_b1" debajo de la rama denominada "BRANCH1" siga los pasos:

  1. Pedido o cambiar en "BRANCH1"

    git checkout branch1 
    
  2. ahora, puede crear su nueva rama llamada "subbranch_of_b1" bajo la " branch1 " usando el siguiente comando.

    git checkout -b subbranch_of_b1 branch1 
    

    Lo anterior se creará una nueva rama llamada subbranch_of_b1 bajo la rama BRANCH1 (tenga en cuenta que branch1 en el comando anterior no es obligatorio puesto que la cabeza está apuntando a la misma, que pueda precisa que si pero estás en una rama diferente).

  3. Ahora después de trabajar con el subbranch_of_b1 puede comprometerse y empuje o fusionarla forma local o remota.

A sample Graphical Illustration Of Creating Branches Under another Branch

+1

cómo empujar el subbranch_of_b1 al control remoto? – user269867

+7

@ user269867: "git push origin subbranch_of_b1" hará este trabajo por usted. –

+0

Ahora, si presiono cambios en el maestro, ¿ocurrirá en branch1 automáticamente? –

-1
git checkout branchName 

cambiado a otra rama "BRANCHNAME"

+4

Esto solo lo crea desde la rama actual , no necesariamente desde donde te quieres derivar. @ Alex's [respuesta] (http://stackoverflow.com/a/32391944/5804443) es la respuesta correcta IMO. –

10

crear una rama

  • Crear rama cuando rama principal está desprotegido. Aquí los commits en master se sincronizarán con la rama que creaste.

    $ git branch branch1

  • Crear bifurcación cuando branch1 está desprotegido.Aquí se compromete en BRANCH1 se sincronizarán con BRANCH2

    $ git branch branch2


Pedido renuevo

ramas modificador de comando git checkout o restaurar los archivos del árbol de trabajo

  • $ git checkout branchname

Cambiar el nombre de una rama

  • $ git branch -m branch1 newbranchname

Eliminar una rama

  • $ git branch -d branch-to-delete
  • $ git branch -D branch-to-delete (eliminación fuerza sin comprobar el estado resultante de la fusión)

Crear e interruptor Branch

  • $ git checkout -b branchname

Ramas que se incluyen completamente

  • $ git branch --merged


****************** ******** Diferencias de rama [git diff branch1 ..BRANCH2] ************************

diferencia Multiline
  • $ git diff master..branch1
diferencia SingleLine
  • $ git diff --color-words branch1..branch2
+0

gracias por los comandos adicionales. . . –

Cuestiones relacionadas