Cómo obtener cierta confirmación del proyecto GitHub


151

Necesito descargar la API de Facebook de GitHub . Normalmente, solo hago clic en la pestaña 'Descargas "para descargar el último código fuente. En este caso, necesito una confirmación anterior: 91f256424531030a454548693c3a6ca49ca3f35a , pero no tengo idea de cómo obtener todo el proyecto de esa confirmación ...

¿Alguíen puede decirme como hacer esto, por favor?

(Por cierto, estoy en una Mac. No sé si eso hace alguna diferencia).


1
consulte también stackoverflow.com/questions/13636559/… si "solo" necesita el "código de instantánea comprimido".
Jean Fontaine

Respuestas:


216

Primero, clone el repositorio usando git, por ejemplo con:

git clone git://github.com/facebook/facebook-ios-sdk.git

Eso descarga el historial completo del repositorio, por lo que puede cambiar a cualquier versión. A continuación, cambie al repositorio recién clonado:

cd facebook-ios-sdk

... y use git checkout <COMMIT>para cambiar a la confirmación correcta:

git checkout 91f25642453

Eso le dará una advertencia, ya que ya no está en una rama y ha cambiado directamente a una versión en particular. (Esto se conoce como estado de "CABEZA separada"). Dado que suena como si solo quisiera usar este SDK, en lugar de desarrollarlo activamente, esto no es algo de lo que deba preocuparse, a menos que esté interesado en descubrirlo Más información sobre cómo funciona Git.


44
En este punto también puedes hacerlo git exportsi solo quieres los archivos.
Xeoncross

1
git checkout -q <commit#>silencia el stderr de advertencia durante el pago de git.
Manavalan Gajapathy

Cuando hago el pago git 441b034635240bc873700473af3e98533e94a0b5, esto da un error: fatal: la referencia no es un árbol: 441b034635240bc873700473af3e98533e94a0b5
ttb

135

No sé si estaba allí cuando publicaste esta pregunta, pero la mejor y más fácil forma de descargar un commit es hacer clic en la pestaña de commits al ver un repositorio. Luego, en lugar de hacer clic en el nombre de confirmación, haga clic en Examinar el repositorio en este punto del botón de historial con el símbolo <> a la derecha del nombre / mensaje de confirmación, y finalmente en el botón Descargar ZIP que aparece cuando hace clic en Clonar o Botón de descarga .

Espero que les sirva de ayuda.


3
Esta es la única forma de recuperar "commits perdidos", que son commits de los que github tiene un historial, pero fueron borrados de la línea de tiempo "oficial" de git. Con esto, puede obtener una instantánea zip de una confirmación que se reformuló en el olvido, impulsar esa confirmación a una nueva rama, recuperar esa rama en un repositorio existente y volver a seleccionarla.
Ajax

@Ajax Eso no es cierto. Todavía puede obtener el sha usando git reflog, y luego retirar el commit separado
Aaron Brager

@AaronBrager seguro, el reflog funcionará, SI está en la misma máquina que inicialmente había tenido la confirmación. El OP ya conoce la confirmación, por lo que no necesitarían volver a registrar y simplemente podrían pagar directamente. Sin embargo, estoy hablando de casos en los que no tiene el compromiso localmente, y no está en ninguna rama que todavía esté en el repositorio público. En estos casos, github aún puede tener un registro de la confirmación, que puede descargar como un archivo zip para poder recuperar dicha confirmación.
Ajax

@Ajax Ah, gracias por la aclaración. Como alternativa, puede acceder a la API de GitHub ( api.github.com/repos/facebook/facebook-ios-sdk/events ) y crear una rama a partir de la confirmación huérfana ( instrucciones aquí )
Aaron Brager

Muy agradable. +1 ¡No sabía que podrías consultar el reflog de github así!
Ajax

27

La respuesta de Sivan en gif ingrese la descripción de la imagen aquí

1.Haga clic en commits en github

2. Seleccione Examinar código en el lado derecho de cada confirmación

3.Haga clic en el zip de descarga, que descargará el código fuente en ese momento de confirmación


Hola suraj, ¿puedes decirme cómo creaste el gif de tu pantalla?
Rahul Satal

utilice el reproductor de tiempo rápido para grabar un video de la pantalla. Haga la conversión de video a gif usando cualquier herramienta disponible. Google. @ Rahul Satal
Suraj K Thomas

1
Gracias @SurajKThomas por el gif
Sivan

10

Para descargar una confirmación utilizando el formulario corto SHA1 de 7 dígitos, haga lo siguiente:

Ejemplo de trabajo

https://github.com/python/cpython/archive/31af650.zip  

Descripción:

 `https://github.com/username/projectname/archive/commitshakey.zip`

Si tiene la clave hash larga 31af650ee25f65794b75d4dfefed6fe4758781c1, solo obtenga los primeros 7 caracteres 31af650. Es el valor predeterminado para GitHub.


8

La forma más fácil que encontré para recuperar una confirmación perdida (que solo existe en github y no localmente) es crear una nueva rama que incluya esta confirmación.

  1. Tenga el commit abierto (url como: github.com/org/repo/commit/long-commit-sha)
  2. Haga clic en "Buscar archivos" en la esquina superior derecha
  3. Haz clic en el menú desplegable "Árbol: short-sha ..." en la esquina superior izquierda
  4. Escriba un nuevo nombre de sucursal
  5. git pull la nueva sucursal hasta local

Esta respuesta es más general que la aceptada. Encontré esta situación de que la confirmación que quería ya desapareció en la rama maestra, y Github no mantendrá todas las confirmaciones en las ramas no existentes. Entonces, este enfoque creará una nueva rama a partir de ese commit en Github y lo hará extraíble.
Qi Luo

Esto me permitió recuperar un commit (con el SHA original intacto) de una bifurcación eliminada de la que hice un PR. Después de crear una nueva bifurcación, abrí el compromiso de relaciones públicas en el repositorio ascendente y luego "examiné los archivos". Luego copié esa URL y reemplacé el nombre de usuario por el mío. Luego hice clic en el menú desplegable Árbol: y creé una nueva rama en mi bifurcación. Funcionó genial!
Allen Luce

2

El título de la pregunta es ambiguo.


1

Como complemento de la respuesta aceptada:

Para ver los hashes, debe usar el comando sugerido "git checkout hash ", puede usar git log. Sin embargo, dependiendo de lo que necesite, hay una manera más fácil que copiar / pegar hashes.

Puede usar git log --onelinepara leer muchos mensajes de confirmación en un formato más comprimido.

Digamos que ves una lista de una línea de los commits con información mínima y hashes solo parcialmente visibles:

hash111 (HEAD -> master, origin/master, origin/HEAD)
hash222 last commit
hash333 I want this one
hash444 did something
....

Si quieres last commit, puedes usar git checkout master^. El ^te da el compromiso ante el maestro. Por lo tanto hash222.

Si desea la última enésima confirmación, puede usarla git checkout master~n. Por ejemplo, usar git checkout master~2le daría la confirmación hash333.


0

En lugar de navegar a través de los commits, también puede presionar la ytecla ( Ayuda de Github , Atajos de teclado ) para obtener el "enlace permanente" para la revisión / commit actual.
Esto cambiará la URL de https://github.com/<user>/<repository>(master / HEAD) a https://github.com/<user>/<repository>/tree/<commit id>.

Para descargar la confirmación específica, deberá volver a cargar la página desde esa URL, por lo que el Clone or Downloadbotón apuntará a la "instantánea" en https://github.com/<user>/<repository>/archive/<commit id>.zip lugar de la última https://github.com/<user>/<repository>/archive/master.zip.


0

Pruebe la siguiente secuencia de comandos:

$ git fetch origin <copy/past commit sha1 here>
$ git checkout FETCH_HEAD
$ git push origin master

-1

Si desea ir con un compromiso determinado o desea codificar un compromiso determinado, puede usar el siguiente comando:

git checkout <BRANCH_NAME>
git reset --hard  <commit ID which code you want>
git push --force

Ejemplo:

 git reset --hard fbee9dd 
 git push --force

2
Esto es peligroso, tiene más sentido clonar el repositorio y pagar una versión
user1767754
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.