¿Cómo puedo comprometer la última confirmación en un repository de git bare?

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 ):

  • no cambia ningún SHA1 para los otros commits anteriores al que elimine.
  • está seguro de que retira el contenido exacto del repository desnudo less el compromiso extra (porque lo clonó primero).

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> .