remota rama partir otra crear comandos cambiar git commit patch

rama - git pull



¿Cómo mover ciertos compromisos para basarse en otra rama en git? (5)

Creo que es

git checkout master git checkout -b good_quickfix2 git cherry-pick quickfix2^ git cherry-pick quickfix2

La situación:

  • el maestro está en X
  • quickfix1 está en X + 2 confirmaciones

Tal que

o-o-X (master HEAD) / q1a--q1b (quickfix1 HEAD)

Entonces comencé a trabajar en quickfix2, pero por accidente tomé quickfix1 como la rama de origen para copiar, no el maestro. Ahora, quickfix2 está en X + 2 confirmaciones + 2 confirmaciones relevantes.

o-o-X (master HEAD) / q1a--q1b (quickfix1 HEAD) / q2a--q2b (quickfix2 HEAD)

Ahora quiero tener una rama con quickfix2, pero sin las 2 confirmaciones que pertenecen a quickfix1.

q2a''--q2b'' (quickfix2 HEAD) / o-o-X (master HEAD) / q1a--q1b (quickfix1 HEAD)

Intenté crear un parche a partir de una cierta revisión en quickfix2, pero el parche no conserva el historial de confirmación. ¿Hay alguna forma de guardar mi historial de confirmaciones, pero tener una rama sin cambios en quickfix1?


Este es un caso clásico de rebase --onto :

# let''s go to current master (X, where quickfix2 should begin) git checkout master # replay every commit *after* quickfix1 up to quickfix2 HEAD. git rebase --onto master quickfix1 quickfix2

Así que deberías ir desde

o-o-X (master HEAD) / q1a--q1b (quickfix1 HEAD) / q2a--q2b (quickfix2 HEAD)

a:

q2a''--q2b'' (new quickfix2 HEAD) / o-o-X (master HEAD) / q1a--q1b (quickfix1 HEAD)

Esto se hace mejor en un árbol de trabajo limpio.
Consulte git config --global rebase.autostash true , especialmente después de Git 2.10 .


La única forma de trabajo que encontré:

git show>~/some_file.txt git checkout master git checkout -b new_branch git apply -stat ~/some_file.txt git apply -check ~/some_file.txt git apply ~/some_file.txt

Entonces necesitas volver a confirmar los cambios, pero es mucho más fácil que hacerlo manualmente ...


Lo más simple que puedes hacer es elegir un rango. Hace lo mismo que el rebase --onto pero es más fácil para los ojos :)

git cherry-pick quickfix1..quickfix2


Puede usar git cherry-pick para seleccionar el compromiso que desea copiar.

Probablemente, la mejor manera es crear la rama a partir del maestro, luego en esa rama use git cherry-pick en las 2 confirmaciones de quickfix2 que desee.