Es interesante escribir cuando se tocan los límites de una herramienta tan versátil como Git.

La situación era la siguiente, se me arrancó el HEAD de un proyecto y terminé dividiéndolo en varios branch experimentales, pero quería regresar la cabeza a un commit anterior.
Localmente, ésto lo pude hacer, estando parado en master, con

git reset tagname

(también funciona con el SHA del commit, etc.)

Pero al intentar exportarlo

git push numerica master

no me permitía el update por no ser fast-forward >>

Total 0 (delta 0), reused 0 (delta 0)
remote: error: denying non-fast-forward refs/heads/master (you should pull first)
To ssh://roberto@numerica.cl/opt/impostor.git
 ! [remote rejected] master -> master (non-fast-forward)
error: failed to push some refs to 'ssh://roberto@numerica.cl/opt/impostor.git'

y ésto con todas las variantes:

git push -f numerica master
git push --force numerica master
git push -f numerica +master:master
etc.

(el + era la opción que daba el man page para este caso)
Incluso traté de desconfigurar >>el servidor

git config --system receive.denyNonFastForwards false

pero no hubo caso.

Al final renombré manualmente la referencia en el remoto

git update-ref HEAD 02b4dbfc564ebeb75083dd4856abf1e12ba2ea7f

y en el local

git update-ref refs/remotes/numerica/master 02b4dbfc564ebeb75083dd4856abf1e12ba2ea7f

lo cual creo que no es lo más limpio porque debe dejar cierta memoria basura…
pero al hacer pull están sincronizados

From ssh://numerica.cl/dir/myapp
 * branch            master     -> FETCH_HEAD
Already up-to-date.

y si hago push a un cambio, pasa

Counting objects: 9, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (5/5), done.
Writing objects: 100% (5/5), 402 bytes, done.
Total 5 (delta 4), reused 0 (delta 0)
To ssh://numerico@numerica.cl/dir/myapp.git
   02b4dbf..c6266f4  master -> master

🙂

Hemos revertido el HEAD en local y remoto.
Git está tan bien hecho que, incluso forzándolo así, no da problema.
Crédito >>

Este sitio utiliza cookies.    Leer más