¿Cuál es la forma más simple de lograr esto?
de:
--A--B \ 1--2--3
a:
--A--B--2 \ 1--3
No puedo encontrar una forma simple de lograr esto (less de 5 pasos).
Olvidaste las tags; vamos a ponerlos de nuevo. Aquí está "antes":
--A--B <-- master \ 1--2--3 <-- feature
y aquí está "después". Los marcaré con una marca (o "principal" o como quiera llamar) ya que serán copys de las confirmaciones originales, con identificaciones de compromiso nuevas y diferentes.
--A--B--2' <-- master \ 1'-3' <-- feature
Esto no puede hacerse en un solo paso: toma al less dos.
Primero tenemos que volver a orderar la secuencia 1--2--3
para que 2
sea primero. La forma más fácil es probablemente una rebase interactiva (mientras está en la feature
twig, usando el command git rebase -i master
): simplemente cambie la order de pick
y rebase seleccionará 2, luego 1, luego 3 y moverá la label de feature
:
--A--B <-- master \ 2'-1'-3' <-- feature
Ahora solo necesitamos mover la label master
para apuntar a cometer 2'
. Muchos commands harán esto, pero el más simple es la git merge
instrucciones de hacer una fusión de avance rápido (para evitar errores):
git checkout master; git merge --ff-only feature~2
Para evitar echar un vistazo a master
, podemos usar git branch -f
como en la respuesta de VonC (que apareció mientras editaba este), por ejemplo:
git branch -f master feature~2
(en ambos casos necesitamos nombrar commit 2'
; con git branch
debemos nombrar la twig para mover, mientras que con git merge
tenemos que estar en la twig para mover).
Para completar, aquí hay un método diferente pero equivalente (usando cuatro commands git). Primero vamos a get un master
twig:
git checkout master
Ahora podemos seleccionar cometer cometer 2
, crear una copy, 2'
:
git cherry-pick feature^ # or feature~1
que produce este gráfico:
--A--B--2' <-- master \ 1--2--3 <-- feature
Ahora podemos reajustar la feature
interactivamente en el nuevo master
, descartando commit 2
:
git checkout feature git rebase -i master
Cambie las líneas de pick
para copyr 1 y 3 y omita 2, ya que el compromiso 2'
ya está allí en el master
.
Principalmente:
--A--B (master) \ 1--2--3 (B) git checkout B git rebase -i master # reorder commits --A--B (master) \ 2--1--3 (B) git branch -f master 2
puedes get el hash de confirmación de
git reflog
luego ve a la twig principal.
git checkout master
a continuación, select el compromiso de cereza
git cherry-pick <commit-hash>
La confirmación se aplicará a la twig principal si no hay conflictos.