Git – Haz del HEAD local el nuevo maestro

Decidí retroceder algunos commits porque el path que seguí estaba equivocado. Así que revisé Added cordova to .gitignore commit, e hice algunas modificaciones. Como se ilustra a continuación:

enter image description here

Ahora cuando presiono las nuevas modificaciones, aparece un post de error:
error: src refspec (detached from aad6423) does not match any.

¿Cómo puedo decirle a git que descarte las confirmaciones anteriores (en morado) y continúe con mi HEAD local como maestro?

A pesar de que ya no quieres esa vieja twig, a git realmente no le gusta reescribir el historial o descartar cambios. Solo revertir y fusionar.

 git branch new_master # name current detached HEAD git checkout master # switch back to master git revert --no-edit HEAD~4..HEAD # create commits reverting back to where the history split git merge new_master # merge git branch -d new_master # don't need it anymore 

Haz que HEAD sea tu nuevo master local:

 $ git checkout -B master 

Force-push tus cambios:

 $ git push -f 

Debido a que tiene divergencia, deberá destruir el maestro remoto y upload la versión local. Dependiendo de la security en su lugar, es posible que no pueda hacerlo. Esto también tiene otras implicaciones, dependiendo de quién más está haciendo el trabajo basado en el maestro. Debe hacerse con extrema precaución .

 git push origin :master // deletes remote master git push origin master // pushes local master to remote 

Otro (probablemente mejor) enfoque sería revertir las confirmaciones para dominar y confirmar las reversiones (que a su vez son confirmaciones). A continuación, selecciona el trabajo que has hecho en tu localidad. Primero, crea una nueva twig de tema localmente para save tu trabajo.

 git checkout -b <topic_branch_name> // create new branch to save local work git checkout master git reset --hard HEAD // sync local master to remote HEAD git revert <last commit to master> git revert <second-to-last commit to master> ... git revert <Added cordova to .gitignore commit> git push git cherry-pick <commit hash from topic branch commit(s)> 

Dado que presionó los cambios en sentido ascendente, lo mejor es revertirlos con otra confirmación. Una confirmación que deshará los cambios. La eliminación de confirmaciones o derivaciones de la stream ascendente es una mala práctica. Vea esta respuesta para más detalles.

Entonces, haría esto en un par de pasos:

 git co -b new_master 

para get una buena reference de lo que quiere que sea el nuevo maestro.

 git co master ; git co -b old_master 

para mantener una reference al antiguo maestro en caso de que quiera regresar o algo más tarde; siempre puedes borrar esa twig más adelante una vez que estés seguro.

 git co master ; git reset --hard new_master 

esto restablecerá el HEAD de la twig en la que se encuentra (maestro) a la reference especificada (new_master).

 git push -f origin 

esto hará un empuje de fuerza de su nueva twig principal al control remoto. TENGA EN CUENTA que esta es una mala práctica si alguien más está utilizando su repository remoto ya que potencialmente romperá sus capturas / tiradas.