Teniendo en count que hay varios commands git que no tienen sentido en un repository simple (porque los repositorys simples no usan índices y no tienen un directory de trabajo),
git reset --hard HEAD^
no es una solución para no comprometer el último cambio en dicho repository.
Buscando en Internet, todo lo que pude encontrar relacionado con el tema es este , en el que me presentan tres forms de hacerlo:
1. "actualice la ref manualmente (que involucra la plomería)";
2. " git push -f
desde un repository no desnudo";
3. " git branch -f this $that
".
¿Qué solución crees que es más apropiada o qué otras forms hay para hacer esto? Desafortunadamente, la documentation que encontré sobre los repositorys de Git es bastante pobre.
Muchas gracias,
Lavinia
Puede usar el command git update-ref
. Para eliminar la última confirmación, usaría:
$ git update-ref HEAD HEAD^
O si no estás en la twig desde la que no puedes eliminar la última confirmación:
$ git update-ref refs/heads/branch-name branch-name^
También puede pasar un sha1 si lo desea:
$ git update-ref refs/heads/branch-name a12d48e2
Consulte la documentation del command git-update-ref .
Si usa lo siguiente en un repository simple:
git reset --soft <commit>
entonces no se encuentra con los problemas que tiene al usar opciones --hard
y --mixed
en un repository --mixed
ya que no está tratando de cambiar algo que el repository no tiene (es decir, tree de trabajo e índice). En su caso, específicamente, usted querría usar (del informe simple):
git reset --soft HEAD^
Para cambiar las twigs en el repository remoto, haga lo siguiente:
git symbolic-ref HEAD refs/heads/<branch_name>
El git push -f
debería funcionar bien:
si clonas ese repository desnudo, elimina el último commit ( git reset --hard HEAD^
como mencionas, pero en un repository local no desnudo) y presiona hacia atrás ( -f
):
También puede usar la notación git refspec y hacer algo como esto:
git push -f origin +<commit you want to revert to>:<destination_head | branch_name>
Esto fuerza la actualización de la bifurcación de destino (como lo denota el ref) a la confirmación de origen como se denota por la parte +<object ref>
.