soft origin hard changes all git branch revert head

origin - revert branch git



Hacer git master HEAD point al actual HEAD de branch (3)

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 rama y ahora estoy en un punto en el que me gustaría cambiar la rama maestra actual del repositorio 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 rama limpia en él.

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


  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 cuenta 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 comando 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


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

git push --force origin clean_start:master

Tenga en cuenta que si alguien más tiene el repositorio clonado, un impulso de ellos podría deshacer esto . Si desea fusionar su rama principal local y la rama principal remota, pero mantener el árbol de archivos de su rama (descartando el árbol de archivos 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 ramas (el maestro y el maestro de origen) como padre, pero el árbol 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 repositorio, puede usar el primer enfoque. Pero si trabajas con otras personas que ya tienen estos commits, el segundo enfoque será más a prueba de tontos y mantendrá la historia.