tag remota rama crear git rebase

remota - git push



Git rebase una rama encima de otra rama (4)

Quiero reajustar mis cambios (desde la branch2 ) en la parte superior de la branch1 .

git checkout branch2 # Go to your local branch. Use -f to force the checkout. git reset HEAD --hard # Drop all non-committed changes. git rebase branch1 # Rebase on top of branch1. Use -i for an interactive list.

Nota: Si una rama está en el remoto, como origin , prefija el nombre de la rama con origin/ .

Solución de problemas

  • Si te quedas atascado en medio de rebase y quieres comenzar de nuevo, ejecuta:

    rm -fr .git/rebase-merge # Abort a rebase-merge mode. git reset HEAD --hard # Reset everything to the current HEAD.

  • Si estás en la rama separada (ejecuta: git branch y busca el símbolo de la estrella), ejecuta:

    git checkout branch2 -f # and start again.

  • Si tiene conflictos, necesita corregirlos , use un punto de rebasado diferente.

  • Si desea hacer el reajuste manual paso a paso, use cherry-picking. P.ej

    git reflog # Note hashes of for your commits. git checkout master # Go to your base branch. git cherry-pick C0MM1T1 # Cherry pick first commit based on its hash. # Go to the next one or solve the conflicts. git cherry-pick C0MM1T2 # Cherry pick another commit and so on.

  • Si su rebase muestra demasiados compromisos en la lista interactiva después de ejecutar git rebase branch1 -i , puede iniciar su rebase dado el compromiso específico justo antes de sus cambios, por ejemplo, git rebase pr3v1ios .

En mi repositorio de git, tengo una rama Master . Uno de los desarrolladores remotos creó una rama Branch1 y tenía un montón de confirmaciones en ella. Me Branch1 partir de Branch1 , creando una nueva rama llamada Branch2 ( git checkout -b Branch2 Branch1 ) de tal manera que la cabeza de Branch2 estaba en el último commit agregado a Branch1 : (se parece a esto)

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

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

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

Ahora quiero tener que volver a introducir mis cambios en la parte superior de Branch1 . Estoy sumamente confundido sobre cómo hacer esto. Sé que el primer paso será confirmar mis cambios usando git add . y git commit -m "message" . ¿Pero entonces empujar? usando el git push origin Branch2 ? o git push origin Branch2 Branch1 ? La ayuda es muy necesaria y GRATUITAMENTE apreciada, también si puedo crear una copia de seguridad de mi sucursal, será genial en caso de que estropee algo


En primer lugar, debe asegurarse de que su referencia 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


Primero copia de seguridad de su actual Branch2 :

# 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 tu rama debería verse así:

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

En el diagrama anterior, el apóstrofe en Branch2 indica que cada confirmación en Branch2 después de la confirmación 4 es en realidad una reescritura.

Tenga en cuenta que ahora ha reescrito el historial de Branch2 y, si la sucursal ya está publicada, tendrá que forzar su inserción en el control remoto a través de

git push --force origin Branch2

La fuerza de empuje puede causar problemas a cualquier otra persona que use Branch2 por lo que debe tener cuidado al hacer esto.


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

La operación puede producir algunos conflictos que luego tendrás que resolver manualmente. Edite los archivos afectados, fusionando contenido y eliminando cualquier archivo defectuoso. Luego, marque los archivos 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 empujar. Sin embargo, si desea reflejar sus nuevos cambios en algún otro repositorio (por ejemplo, compartirlo con otros o tener esos cambios en otro repositorio suyo), haga un git push final.