que - ¿Cómo puedo comprometer la última confirmación en un repositorio de git bare?
git push example (4)
El git push -f
debería funcionar bien:
si clonas ese repositorio desnudo, elimina el último commit ( git reset --hard HEAD^
como mencionas, pero en un repositorio 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 repositorio desnudo menos el compromiso extra (porque lo clonó primero).
Teniendo en cuenta que hay varios comandos git que no tienen sentido en un repositorio simple (porque los repositorios simples no usan índices y no tienen un directorio de trabajo),
git reset --hard HEAD^
no es una solución para no comprometer el último cambio en dicho repositorio.
Buscando en Internet, todo lo que pude encontrar relacionado con el tema es this , en el que me presentan tres formas de hacerlo:
1. "actualice la ref manualmente (que involucra la plomería)";
2. " git push -f
desde un repositorio no desnudo";
3. " git branch -f this $that
".
¿Qué solución crees que es más apropiada o qué otras formas hay para hacer esto? Lamentablemente, la documentación que encontré sobre los repositorios sin formato es bastante pobre.
Puede usar el comando git update-ref
. Para eliminar la última confirmación, usaría:
$ git update-ref HEAD HEAD^
O si no estás en la rama 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 documentación del comando git-update-ref .
Si usa lo siguiente en un repositorio simple:
git reset --soft <commit>
entonces no se encuentra con los problemas que tiene al usar opciones --hard
y --mixed
en un repositorio --mixed
ya que no está tratando de cambiar algo que el repositorio no tiene (es decir, árbol de trabajo e índice). En su caso, específicamente, usted querría usar (del informe simple):
git reset --soft HEAD^
Para cambiar las ramas en el repositorio remoto, haga lo siguiente:
git symbolic-ref HEAD refs/heads/<branch_name>
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>
.