2012-04-10 23 views
39

¿Es posible ver el reflog de un control remoto? Es decir, quiero saber cuál es la salida de git reflog en otra máquina remota.git ¿Puedo ver el reflog de un control remoto?

Nota, no estoy pidiendo la reflog de ramas de seguimiento a distancia (como origin/master), que estoy pidiendo lo que dice reflogen la otra máquina.

+1

Si tiene acceso al sistema de archivos del sistema remoto (que a menudo es un repositorio simple) siempre tiene la opción de ejecutar git reflog allí. Pero tener ese acceso normalmente no es posible. Tengo la costumbre de hacer esto posible en los servidores de git (utilizando un recurso compartido de solo lectura), solo para posibilitar la revisión del reflog en el lado del servidor. –

Respuesta

26

La respuesta es básicamente "no" (excepto en esa máquina), porque el reflog es un registro de reasignaciones hechas localmente de algún nombre de referencia. Esencialmente, cada vez que se ejecute la actualización git update-ref -m msg <name> <target> ... se registra a nivel local: .git/logs/<name> para crear una línea añadida:

$ git update-ref -m foo HEAD HEAD^ 
$ tail -1 .git/logs/HEAD 
2418b6ba8fd0289933c9351260a272b8e410867f 8d945134b0cead535d66af29c8eb4228b5dc3763 [redacted] <[redacted]> 1334106483 -0600  foo 

(la cosa antes del mensaje, en este caso foo, no es espacios, sino más bien una ficha; I lo expandió para propósitos de SO). Conceptualmente, todo lo demás que mueve una sugerencia de rama invoca git update-ref para hacerlo (algunos son scripts de shell y literalmente hacen eso, otros solo invocan el código C que hace todas las actualizaciones de archivos) ... y todo en .git/logs constituye el reflog.

Si hubiera elementos en los protocolos subyacentes de git: // y/o ssh: // que te permiten acceder al reflog, eso lo haría, pero hasta donde sé, no es así.

22

En la remota posibilidad de que la máquina remota es un repositorio GitHub, Eventos API

  1. Primer uso de Github para recuperar el SHA confirmación.
    curl https://api.github.com/repos/<user>/<repo>/events

  2. Identificar el SHA del huérfano cometer-id que ya no existe en cualquier rama.

  3. A continuación, use la API Refs de Github para crear una nueva rama que apunte a la confirmación huérfana.

    curl -i -H "Accept: application/json" -H "Content-Type: application/json" -X POST -d '{"ref":"refs/heads/D-commit", "sha":"<orphan-commit-id>"}' https://api.github.com/repos/<user>/<repo>/git/refs

    <orphan-commit-id> Reemplazar en el comando anterior con el SHA identificado en el paso 2.

  4. Finalmente git fetch la rama recién creada en su repositorio local.
    Desde allí puede seleccionar o fusionar de nuevo la (s) confirmación (es) en su trabajo.

Consulte this article para obtener un ejemplo real.

+4

¡Muchas gracias! Para aquellos menos proclives a usar la línea de comando, también pueden omitir el paso 3 con solo abrir https://github.com/ //commits/ y crear una nueva bifurcación desde él directamente en el "Árbol:" menú desplegable. Entonces solo tráelo normalmente. – waldyrious

+0

Si obtiene un mensaje de error "mensaje": "No encontrado", esto significa que debe autenticarse, p. pasando una cadena de consulta access_token. –

+0

Para mí, la forma más fácil de rastrear el * SHA del huérfano commit-id * era mirar la última compilación en CircleCI (o [insertar servicio CI aquí]). – samjewell

2

En GitHub, si hizo por error un git push --force en el maestro antes de buscar los cambios fusionados y, mientras tanto, se eliminó la rama fusionada (sí, me pasó a mí), puede buscar la solicitud de extracción fusionada e ir se compromete a la sección, por ejemplo:

enter image description here

Después de ir a la última confirmación y haga clic en el botón <> (que tiene el título "Examinar el repositorio en este momento de la historia").

Esto lo llevará al punto "eliminado" de la historia. Desde aquí puede:

  • crear una nueva rama y luego abrir una nueva solicitud de extracción (se recomienda si el cambio proviene de otro repositorio).
  • abre una nueva solicitud de extracción (recomendada para confirmaciones dentro de su repositorio).
Cuestiones relacionadas