Git: mueve una twig para que apunte a otra

Tuve la siguiente situación:

-----O | master branch1 

entonces tuve que hacer algunos cambios al maestro:

  -----O-----O-----O | | branch1 master 

ahora quiero que branch1 esté en el mismo punto de master (y, por lo tanto, que contenga los commits que hice):

 -----O-----O-----O | master branch1 

No sé si una fusión sería la forma correcta de lograr esto. ¿Qué pasos debo tomar?

EDITAR: también tenga en count que he realizado cambios no confirmados que deberían comprometerse en branch1 luego de que branch1 esté actualizado con master. así que necesito que los cambios actuales queden intactos para ser comprometidos más tarde en branch1

Como branch1 reference a un commit que es un ancestro de master , una operación de fusión no dará como resultado una combinación de fusión; en su lugar, Git simplemente moverá la reference de branch1 hacia adelante para que haga reference a la misma confirmación como master . Esto se denomina fusión de avance rápido .

De la documentation :

Cuando intenta fusionar una confirmación con una confirmación que puede alcanzarse siguiendo el historial del primer compromiso, Git simplifica las cosas moviendo el puntero hacia adelante porque no hay trabajo divergente para fusionarse: esto se denomina "avance rápido".

Entonces, en tu caso, simplemente puedes decir:

 git checkout branch1 git merge master 

lo que hará que branch1 apunte al mismo commit que master .

Actualización: tenga en count que necesita tener un directory de trabajo limpio antes de realizar la fusión. Si tiene cambios no confirmados en branch1 (es decir, tiene un directory de trabajo sucio ), primero debe almacenarlos en el alijo usando el command git-stash :

 git stash save --include-untracked -m "Work in progress" 

Una vez que se guardan los cambios y se limpia el directory de trabajo, puede continuar con la fusión. Luego, puede restaurar los files del alijo diciendo:

 git stash pop 

que volverá a poner esos files en el directory de trabajo y los eliminará del alijo. En ese punto, puede elegir comprometerlos en cualquier cantidad de confirmaciones.

Si su directory de trabajo está limpio (de lo contrario, haga un 'escondite'), se encuentra en un caso especial en el que 'rebase', 'merge' y 'reset –hard' hacen exactamente lo que usted quiere hacer …

Esto parece un trabajo para rebase, así que haría lo siguiente:

 git commit -m 'your work on branch 1' # from branch1 git rebase master # also from branch1 

Esto branch1 los nuevos commits de master a branch1 , y luego reproducirá tu commit en la parte superior de los commits de master .

branch1 vista funcional, la combinación de master en branch1 también debería estar bien, pero es posible que no mantenga la resolución que se comprometen los dos, sino que termina con una única combinación de commit.

En este caso simple, puedes hacerlo de la manera más simple:

 git branch -f branch1 master 

Desde la git help branch :

 git branch [--set-upstream | --track | --no-track] [-l] [-f] <branchname> [<start-point>] 

EDITAR: para mantener los cambios no confirmados:

 git stash git checkout master git branch -f branch1 master git checkout branch1 git stash pop 

Los cambios no confirmados ahora serán nuevamente no comprometidos (o sin agregar, dependiendo de lo que fueron antes).