Hacer git master HEAD point al actual HEAD de branch

Debo admitir que no jugué con las funciones avanzadas de gits, pero en mi proyecto actual tenía que hacerlo.

La situación: alguien trató de implementar algunas características y se las arregló al maestro, ahora me llamaron para hacer lo que esta otra persona intentó hacer (pero falló), por lo tanto, lo primero que hice fue

git checkout -b clean_start HASH 

Hash es un hash SHA1 correcto de aproximadamente 20 commits antes del master actual y funcionó. Ahora hice algunos cambios en esta twig y ahora estoy en un punto en el que me gustaría cambiar la twig maestra actual del repository remoto (que tiene los cambios realizados por la otra persona) en mi sucursal local.

En otras palabras, me gustaría mover el jefe del master 20 commits hacia atrás y luego fusionar mi nueva twig limpia en él.

¿Es eso exactamente lo que tengo que hacer? Con revertir HEAD ~ 20 etc. o hay un command que hace exactamente tal movimiento de cabeza?

Puede hacer esto, si el repository remoto acepta impulsos forzados:

 git push --force origin clean_start:master 

Tenga en count que si alguien más tiene el repository clonado, un impulso de ellos podría deshacer esto . Si desea fusionar su twig principal local y la twig principal remota, pero mantener el tree de files de su twig (descartando el tree de files del maestro de origen), puede hacerlo así:

 git merge -s ours --no-commit origin/master git commit # Separate step so that you can use your own commit message. git checkout master git merge clean_start # Fast-forward git push origin master 

Esto creará un compromiso de fusión con ambas twigs (el maestro y el maestro de origen) como padre, pero el tree será idéntico al consejo de sucursal actual. En otras palabras, creará una fusión simbólica donde no se produjo una fusión de código real.

Si no le importa que se interrumpa a otras personas que trabajan en el repository, puede usar el primer enfoque. Pero si trabajas con otras personas que ya tienen estos commits, el segundo enfoque será más a testing de tontos y mantendrá la historia.

  1. Puedes señalar específicamente al maestro al lugar donde quieres que esté:

     git update-ref refs/heads/master clean_start 

    (si está rastreando los nuevos cambios en clean_start y quiere que el maestro apunte allí)

    Tenga en count que cualquier maestro que señale (aproximadamente 20 commits worth) se "perderá".

    Tendrás que forzar la presión del maestro por esto:

     git push origin master -f 
  2. Si desea dejar su maestro local donde está y presionar el lugar clean_start para el maestro remoto, simplemente haga esto:

    git push origen clean_start: master -f

    espero que esto ayude.

    PD. Ejecute gitk --all & primero para que pueda ver lo que sucede visualmente mientras hace esto.

El command de reinicio de git existe para cambiar a qué apunta HEAD.

En tu caso, puedes hacer esto:

 git checkout master # switch to the master branch git reset --hard clean_start # point HEAD to the clean_start branch git push -f origin master:master # force push the new HEAD to server