Crea una rama en Git desde otra rama

989

Tengo dos ramas: maestro y dev

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

Actualmente en la rama de desarrollo, hago:

$ git checkout -b myfeature dev

... (algo de trabajo)

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

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

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

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

¿Qué estoy haciendo mal?

¿Puede explicarme, por favor, cómo se bifurca de otra bifurcación y vuelve al repositorio remoto para la bifurcación de funciones?

Todo eso en un modelo ramificado como el descrito aquí .

revohsalf
fuente

Respuestas:

1431

Si le gusta el método en el enlace que ha publicado, eche un vistazo a Git Flow .

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

Pero para responder tu pregunta:

$ git checkout -b myFeature dev

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

$ git commit -am "Your message"

Ahora combine sus cambios en 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 quieras.

Abizern
fuente
32
¿Cuál es la importancia de empujar myFeaturedespués de que se haya fusionado dev?
Alexander Suraphel
3
@spartacus Si la myFeaturerama fue empujada al servidor antes de fusionarse, entonces nada. Pero si myFeatureaún no se ha enviado al servidor y desea que aparezca en el servidor, debe enviarlo aparte.
xOneca
15
es git checkout -b myFeature devlo mismo que estos 3 comandos: ¿ git checkout deventonces git branch myFeaturey luego git checkout myFeature?
Kevin Meredith
3
Es, o debería ser. ¿Estás viendo algo diferente?
Abizern
33
Para aclarar a otros novatos, así es --no-ffcomo se ve una fusión
A__
407

Si desea crear una nueva rama a partir de cualquiera de las ramas existentes en Git, simplemente siga las opciones.

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

  • Maestro
  • dev
  • rama1

Entonces, si desea crear una nueva rama llamada "subbranch_of_b1" debajo de la rama llamada "branch1", siga los pasos:

  1. Pagar o cambiar a "branch1"

    git checkout branch1
    
  2. Ahora cree su nueva rama llamada "subbranch_of_b1" debajo de "branch1" usando el siguiente comando.

    git checkout -b subbranch_of_b1 branch1
    

    Lo anterior creará una nueva rama llamada subbranch_of_b1 debajo de la rama branch1 (tenga branch1en cuenta que en el comando anterior no es obligatorio ya que el HEAD lo está apuntando actualmente, puede precisarlo si está en una rama diferente).

  3. Ahora, después de trabajar con el subbranch_of_b1 , puede confirmarlo, empujarlo o fusionarlo de forma local o remota.

Una ilustración gráfica de muestra de la creación de ramas debajo de otra rama

empuje el subbranch_of_b1 a remoto

 git push origin subbranch_of_b1 
Praveen George
fuente
77
¿Cómo empujar el subbranch_of_b1 a remoto?
user269867
13
@ user269867: "git push origin subbranch_of_b1" hará este trabajo por usted.
Praveen George
44
Ahora, si empujo los cambios a master, ¿ocurrirá en branch1 automáticamente?
Maestro Yoda
2
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 usted está en una rama diferente, aunque eso es lo que estaba buscando
felipsmartins
10
Vine aquí preguntándome si git checkout -b some-branches taquigrafía git checkout -b some-branch master. Resulta que git checkout -b some-branches una forma abreviada degit checkout -b some-branch <current_active_branch>
Frank Henard
45

Crear una rama

  • Crear rama cuando la rama maestra está desprotegida. Aquí los commits en master se sincronizarán con la rama que creó.

    $ git branch branch1

  • Crear rama cuando branch1 está desprotegido. Aquí los commits en branch1 se sincronizarán con branch2

    $ git branch branch2


Pagar una sucursal

el comando git checkout cambia ramas o restaura archivos de árbol de trabajo

  • $ git checkout branchname

Renombrar una rama

  • $ git branch -m branch1 newbranchname

Eliminar una sucursal

  • $ git branch -d branch-to-delete
  • $ git branch -D branch-to-delete ( forzar la eliminación sin verificar el estado combinado )

Crear y cambiar sucursal

  • $ git checkout -b branchname

Ramas que están completamente incluidas

  • $ git branch --merged


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

Diferencia multilínea
  • $ git diff master..branch1
Diferencia de línea única
  • $ git diff --color-words branch1..branch2
Gnanasekar S
fuente
1
Además, después de cambiar el nombre de la rama, use git push origin :old-name new-namepara eliminar la rama remota de nombre antiguo y presione la rama local de nombre nuevo.
95faf8e76605e973
13

Hacer trabajo simultáneo en la devsucursal. 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 se puede considerar como un movimiento hacia adelante. Llegaste al punto A en dev, y desde allí simplemente continuaste en un camino paralelo. Las dos ramas no han divergido realmente.

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

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

Versus

       /----*DevB
*-----*DevA
       \----*FeatureC
ToothlessRebel
fuente
9

Git 2.23 introduce git switchy git restoredivide las responsabilidades degit checkout

Crear una nueva rama desde una rama existente a partir de git 2.23:

git switch -c my-new-branch

Cambió a una nueva sucursal 'my-new-branch'

  • -c es la abreviatura de --create y reemplaza el conocido git checkout -b

Eche un vistazo a esta publicación de blog de Github que explica los cambios con mayor detalle:

Git 2.23 trae un nuevo par de comandos experimentales al conjunto de los existentes: git switch y git restore . Estos dos están destinados a proporcionar una mejor interfaz para el conocido git checkout. Los nuevos comandos tienen la intención de que cada uno tenga una separación clara, dividiendo cuidadosamente las muchas responsabilidades de git checkout

JSON C11
fuente
9

Para crear una rama desde otra rama en su directorio local, puede usar el siguiente comando.

git checkout -b <sub-branch> branch

Por ejemplo:

  • nombre de la nueva sucursal que se creará 'XYZ'
  • nombre de la rama ABC bajo la cual se debe crear XYZ
git checkout -b XYZ ABC
Sumit Ghewade
fuente
3

Si desea hacer una rama de otra rama, siga los siguientes pasos:

supuestos :

  1. Actualmente estás en la rama maestra.
  2. No tiene cambios para comprometerse. (Si tiene que realizar cambios, ¡guárdelo!).
  3. BranchExistinges el nombre de la sucursal desde la que necesita hacer una nueva sucursal con nombre BranchMyNew.

Pasos :

  1. Obtenga la sucursal en su máquina local.

    $ git fetch origin BranchExisting : BranchExisting
    

Este comando creará una nueva sucursal en su local con el mismo nombre de sucursal.

  1. Ahora, desde la salida de la rama maestra hasta la rama recién obtenida

    $ git checkout BranchExisting
    
  2. Ahora estás en BranchExisting. Ahora cree una nueva rama a partir de esta rama existente.

    $ git checkout -b BranchMyNew
    

¡Aqui tienes!

Mierda
fuente
1

Para crear una rama desde otra, también puede usar esta sintaxis:

git push origin refs/heads/<sourceBranch>:refs/heads/<targetBranch>

Es un poco más corto que "git checkout -b" + "git push origin"

Alexander Samoylov
fuente