Encuentra un commit en GitHub dado el hash commit

286

Soy bastante nuevo en Github y me he encontrado con un problema de aficionado.

Se me ha pedido que revise el código y se me ha proporcionado un hash de confirmación, sin embargo, he intentado buscar en Git si puedo buscar usando hashes de confirmación pero no he podido encontrar nada.

¿Hay alguna manera de encontrar el código modificado con solo usar el hash de confirmación?

dopplesoldner
fuente
46
Me resulta completamente extraño que Github no reconozca los hash en las búsquedas y le muestre el commit si hay uno que coincida con ese hash.
Craig Ringer
En realidad @CraigRinger, la búsqueda de github coincidirá con los hash si se producen en una solicitud de extracción . De hecho, puede buscar en todo github un prefijo hash de siete caracteres si lo desea. Pero debe ser una solicitud de extracción, no cualquier confirmación.
Todd Owen
44
@ToddOwen Lo cual es bueno, pero no es el punto. Debe coincidir con los hashes de confirmación dentro de un repositorio cuando busca dentro de ese repositorio, es realmente extraño que no lo haga.
Craig Ringer
2
@CraigRinger ¡Lo hace ahora, por fin! Mira mi nueva respuesta .
Todd Owen

Respuestas:

378

Una URL del formulario https://github.com/<owner>/<project>/commit/<hash>le mostrará los cambios introducidos en esa confirmación. Por ejemplo, aquí hay una corrección de errores reciente que hice a uno de mis proyectos en GitHub:

https://github.com/jerith666/git-graph/commit/35e32b6a00dec02ae7d7c45c6b7106779a124685

También puede acortar el hash a cualquier prefijo único, así:

https://github.com/jerith666/git-graph/commit/35e32b


Sé que acabas de preguntar sobre GitHub, pero para completar: si tienes el repositorio desprotegido, desde la línea de comandos, puedes lograr básicamente lo mismo con cualquiera de estos comandos (los prefijos únicos también funcionan aquí):

git show 35e32b6a00dec02ae7d7c45c6b7106779a124685
git log -p -1 35e32b6a00dec02ae7d7c45c6b7106779a124685

Nota: Si acorta demasiado el hash de confirmación, la línea de comando le brinda un útil mensaje de desambiguación, pero GitHub solo devolverá un 404.

Matt McHenry
fuente
Me encontré con esto cuando traté de rastrear una afirmación en mongo, y descubrí que hay un patrón de URL similar para ver un archivo específico, dado el hash de una confirmación: github.com/$owner/$project/blob/$hash/path /to/file.ext - eg github.com/mongodb/mongo/blob/…
RubyTuesdayDONO
En este: git log -p -1 35e32b6a00dec02ae7d7c45c6b7106779a124685el -1es necesario porque de lo contrario sería una muestra de todas las confirmaciones olders; es bueno saber que puede usar los cuatro números iniciales del hash (el mínimo en mis pruebas), porque no hay finalización automática para el hash; y no se puede especificar la rama de esta manera: git log master -p -1 35e3. Versión de Git: 1.7.9.5.
Rafael Barros
Una observación más, pero muy importante: una vez más, no puede especificar una rama, pero automáticamente busca las ramas locales y remotas cuando da un hash. Entonces, sí, puede buscar un diferencial remoto específico antes de fusionarse con el repositorio local mediante la línea de comando.
Rafael Barros
1
En caso de que alguien se pregunte (¡lo estaba!), Esto también funciona con los primeros 8 del hash tanto en github: github.com/jerith666/git-graph/commit/35e32b6a como en la línea de comando:git log -p -1 35e32b6a
SimplGy
77
Es un poco tonto que la interfaz de usuario no haga esto más fácil de lo que es ... Espero que la solicitud de función lo haga.
ocroquette
49

Ver confirmación única:
https://github.com/<user>/<project>/commit/<hash>

Ver registro:
https://github.com/<user>/<project>/commits/<hash>

Ver repositorio completo:
https://github.com/<user>/<project>/tree/<hash>

<hash> puede ser de cualquier longitud siempre que sea único.

qwertzguy
fuente
1
si la longitud es de al menos 7 caracteres, está bien
Kasun Siyambalapitiya
3
No hay una longitud mínima para el hash de confirmación de 4 caracteres (de nuevo, siempre que sea único en todo el repositorio)
qwertzguy
21

La capacidad de buscar confirmaciones se ha agregado recientemente a GitHub.

Para buscar un hash, solo ingrese al menos los primeros 7 caracteres en el cuadro de búsqueda. Luego, en la página de resultados, haga clic en la pestaña "Compromisos" para ver los compromisos coincidentes (pero solo en la rama predeterminada, por lo general master), o en la pestaña "Problemas" para ver las solicitudes de extracción que contienen el compromiso.

Para ser más explícito, puede agregar el hash: prefijo a la búsqueda, pero no es realmente necesario.

También hay una API REST (al momento de escribir, todavía está en la vista previa).

Todd Owen
fuente
2
Me sorprende que realmente funcione de esta manera. No es tan intuitivo. Por defecto, Github mostrará la pestaña "Código", obviamente sin resultados. ¿No debería mostrar la única pestaña con algún resultado por defecto?
Summerian
Para que quede claro, si tiene su propia instalación empresarial de github, puede encontrar cualquier confirmación en cualquier repositorio buscándola así: tenga en https://YourGithubDomain/search?q=YOUR_COMMIT_HASH&type=Commits cuenta que también probé esto en Github, y funcionó allí también, por ejemplo https://github.com/search?q=38db172d13962ea177c00c9a3b4b3169b317e94b&type=Commits
Brad Parks