una remota ramas rama moverse mezclar cambiar aƱadir git split branch

remota - mezclar 2 ramas git



Dividir una rama git en dos ramas? (3)

Estoy tratando de ayudar a un compañero de trabajo que accidentalmente creó una rama de función de otra rama de función, en lugar de crear la segunda de maestro. Aquí es esencialmente lo que tenemos ahora ...

Master ---A---B---C / Foo E---F---F---H / Bar J---K---L---M

Y esto es lo que nos gustaría tener ...

Master ---A---B---C |/ Foo | E---F---F---H | Bar J---K---L---M

Una forma en la que pensé sería crear las ramas FooV2 y BarV2, y seleccionar las confirmaciones individuales en las ramas V2 apropiadas. Pero tengo curiosidad, ¿hay una mejor manera de manejar esta situación?


Me parece que podrías:

git checkout J git rebase master

Editar:

Intenté lo que sugerí y no funciona. La sugerencia de Knittl no funciona (en mi caja). Esto es lo que funcionó para mí:

git rebase --onto master foo bar


Para una respuesta más general que nos ayude a entender las cosas un poco mejor que simplemente "ejecutar este comando", necesitamos un ejemplo más amplio. Entonces, imaginemos que en realidad estás en esta situación:

---A---B---C <= Master / E---F---F---H <= Foo / J---K---L---M <= Bar / N---O---P---Q <= Baz

Y esto es lo que nos gustaría tener ...

---A---B---C <= Master |/ | E---F---F---H <= Foo |/ | J---K---L---M <= Bar / N---O---P---Q <= Baz

¡Afortunadamente, Git tiene una solución para nosotros en las opciones para el comando rebase !

git rebase --onto [newParent] [oldParent] [branchToMove]

Lo que esto significa se puede dividir en partes:

  1. rebase - Cambia los padres de algo.
  2. --onto - Esta es la bandera que le dice a git que use esta sintaxis alternativa de rebase
  3. newParent : esta es la sucursal que tendrá la sucursal que está rebasando, ya que es la matriz
  4. oldParent : esta es la sucursal que la sucursal que está rebasando actualmente tiene como su matriz
  5. branchToMove : esta es la rama que estás moviendo (rebasando)

El poco acerca de "rama de padre anterior" puede ser un poco confuso, pero lo que realmente está haciendo es decir "ignorar los cambios de mi padre anterior al hacer el rebase". oldParent es cómo define dónde comienza la rama que está moviendo (es decir, branchToMove ).

Entonces, ¿cuáles son los comandos para ejecutar en nuestra situación?

git rebase --onto Master Bar Baz git rebase --onto Master Foo Bar

Tenga en cuenta que el orden de estos comandos es importante porque necesitamos extraer cada rama del final de la "cadena de rama".


Puedes cambiar la base de tu barra al maestro:

git rebase --onto C H M

Si algunos parches entran en conflicto, debe resolverlos manualmente (pero también debe hacerlo al seleccionar Cherry). Una advertencia: no cambie de opinión cuando la historia ya se haya publicado.