revertir una recuperación de git


Tengo un profundo conocimiento de git, y la diferencia entre pull, fetch y merge. Tengo un control remoto con el que rastrear, buscar y fusionar de vez en cuando, digamos que es origin/master. Lo que estoy buscando hacer es revertir el comportamiento de un 'git fetch'. Suena tonto, pero quiero des-actualizar donde apunta mi rama de seguimiento remoto, a un estado más antiguo, el estado justo antes de la última búsqueda. Es esto posible?

Por ejemplo, digamos que este es mi flujo...

git show origin/master # shows commit abc123

git fetch              # yay i got something!

git show origin/master # shows commit def456

El comando misterioso va aquí para eso...

git show origin/master # shows commit abc123

Es un poco raro querer, pero tengo un crontab que observa un repositorio git para detectar cuando hay algo que recuperar, y estoy teniendo problemas para depurar el script que realiza algunas acciones basadas en este comportamiento. En lugar de esperar a que origin / master cambie, me gustaría cambiarlo yo mismo para poder depurar mi script.

 23
Author: user2141094, 2013-03-06

4 answers

Quieres

git update-ref refs/remotes/origin/master refs/remotes/origin/master@{1}

update-ref quiere el hechizo completo sobre la referencia que está actualizando porque es (mucho) de menor nivel que los comandos que respetan las convenciones de nombres de referencia.

 16
Author: jthill,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-03-06 18:14:36

No estoy seguro de si hay un comando git real para hacerlo, y esto es un gran hackish, pero...

echo $OLD_COMMIT > .git/refs/remotes/origin/master

Debería funcionar

 1
Author: Dewey Sasser,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-03-06 18:10:14

Esta no es una respuesta de "revertir un git fetch", pero parece que su problema real es cómo "ver un repositorio para cambios" programáticamente sin alterar necesariamente su repositorio de ninguna manera.

Para esto, puede usar git fetch --dry-run. Un simulacro no causará ningún cambio en su repositorio, pero si hay cambios en el remoto, entonces tendrá alguna salida de terminal básica; si no hay cambios no habrá ninguna salida. Si desea que esto se ejecute como un script automatizado en lugar de una comprobación manual, debería ser relativamente sencillo crear un script bash simple que pruebe git fetch --dry-run para la salida.

 1
Author: Tasos Papastylianou,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-12-28 15:45:00

Espero que esta vez tenga lo que quieres y creo que es esto:

git rebase origin/master --onto origin/master^
 0
Author: Stephan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-03-06 18:13:23