Git rebase una twig en la parte superior de otra twig

En mi git repo, tengo una twig Master . Uno de los desarrolladores remotos creó una twig Branch1 y tuvo un montón de commits en ella. Me Branch1 desde Branch1 , creando una nueva twig llamada Branch2 ( git checkout -b Branch2 Branch1 ) de modo que Branch2 head estaba en la última confirmación agregada a Branch1 : (Parece así)

 Master--- \ Branch1--commit1--commit2 \ Branch2 (my local branch) 

Branch1 ha tenido una serie de cambios. El otro dev aplastó sus commits y luego agregó algunos commits más. Mientras tanto, he tenido un montón de cambios en mi sucursal pero aún no he comprometido nada. La estructura actual se ve así:

  Master--- \ Branch1--squashed commit1,2--commit3--commit4 \ Branch2 (my local branch) 

Ahora quiero tener que volver a establecer mis cambios en la parte superior de Branch1 . Estoy summente confundido sobre cómo hacerlo. Sé que el primer paso será comprometer mis cambios usando git add . y git commit -m "message" . ¿Pero entonces presiono? usando git push origin Branch2 ? o git push origin Branch2 Branch1 ? La ayuda es muy necesaria y GRANMENTE apreciada, y si puedo crear una copy de security de mi sucursal, será genial en caso de que me equivoque.

Primero Branch2 copy de security de su Branch2 actual:

 # from Branch2 git checkout -b Branch2_backup 

Luego rebase Branch2 en Branch1 :

 # from Branch2 git fetch origin # update all tracking branches, including Branch1 git rebase origin/Branch1 # rebase on latest Branch1 

Después de la rebase, la estructura de su sucursal debería verse así:

 master -- \ 1 -- 2 -- 3 -- 4 -- Branch2' 

En el diagtwig de arriba, el apóstrofo en Branch2 indica que cada commit en el Branch2 después del commit 4 es en realidad una reescritura.

Tenga en count que ahora ha reescrito el historial de Branch2 y, si la twig ya está publicada, tendrá que forzarla a Branch2 al control remoto a través de

 git push --force origin Branch2 

El Branch2 puede causar problemas a cualquier persona que use Branch2 por lo que debe tener cuidado al hacerlo.

git rebase branch1 branch2 rebase los cambios exclusivamente en branch2 en branch1 .

La operación puede producir algunos conflictos que luego tendrás que resolver manualmente. Edite los files afectados, fusionando contenido y eliminando cualquier trozo fallido. Después, marque los files como fusionados usando git add <file> y luego continúe la rebase usando git rebase --continue . Repita hasta que esté hecho.

Una vez hecho esto, no tienes nada más que hacer. No tienes que presionar Sin embargo, si desea reflejar sus nuevos cambios en algún otro repository (por ejemplo, para compartirlo con otros o para tener esos cambios en otro repository suyo), haga un último git push .

En primer lugar, debe asegurarse de que su reference a Branch1 esté actualizada (especialmente porque su historial ha sido modificado).

Si te gusta trabajar con copys locales, puedes hacer algo como esto:

 git push origin Branch2 # this ensures you have at least one copy in your remote git fetch origin git checkout Branch1 git reset --hard origin/Branch1 git checkout Branch2 git rebase Branch1 # solve conflicts ... and check that everything is ok git push -f origin Branch2