Encontre um commit no GitHub, dado o hash de commit

286

Eu sou bastante novo no Github e me deparei com um problema de amadorismo.

Me pediram para fazer uma revisão de código e recebi um hash de confirmação, no entanto, tentei procurar no Git se posso pesquisar usando hashes de confirmação, mas não consegui encontrar nada.

Existe uma maneira de encontrar o código alterado usando o hash de confirmação?

dopplesoldner
fonte
46
Acho totalmente bizarro que o github não reconheça hashes nas pesquisas e mostre o commit se houver um correspondente nesse hash.
Craig Ringer
Na verdade, @CraigRinger, a pesquisa no github corresponderá a hashes se ocorrerem em uma solicitação de recebimento . Na verdade, você pode pesquisar no github inteiro por um prefixo de hash de sete caracteres, se quiser. Mas deve ser uma solicitação de recebimento, não apenas qualquer confirmação.
Todd Owen
4
@ToddOwen O que é legal, mas não é o ponto. Ele deve corresponder aos hashes de confirmação em um repo quando você pesquisa nesse repo, é realmente maluco que não.
Craig Ringer
2
@CraigRinger Agora, finalmente! Veja minha nova resposta .
Todd Owen

Respostas:

378

Um URL do formulário https://github.com/<owner>/<project>/commit/<hash>mostrará as alterações introduzidas nesse commit. Por exemplo, aqui está uma correção recente que fiz em um dos meus projetos no GitHub:

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

Você também pode encurtar o hash para qualquer prefixo exclusivo, como:

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


Sei que você acabou de perguntar sobre o GitHub, mas para completar: Se você tiver o repositório verificado, na linha de comando, você poderá obter basicamente a mesma coisa com qualquer um desses comandos (prefixos exclusivos também funcionam aqui):

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

Nota: Se você reduzir muito o hash de confirmação, a linha de comando fornecerá uma mensagem útil de desambiguação, mas o GitHub retornará apenas um 404.

Matt McHenry
fonte
Me deparei com isso ao tentar rastrear uma asserção no mongo, e descobri que há um padrão de URL semelhante para exibir um arquivo específico, dado o hash de um commit: github.com/$owner/$project/blob/$hash/path /to/file.ext - por exemplo github.com/mongodb/mongo/blob/...
RubyTuesdayDONO
Neste: git log -p -1 35e32b6a00dec02ae7d7c45c6b7106779a124685, o -1é necessário porque caso contrário ele iria mostrar todos os commits olders; é bom saber que você pode usar os quatro números iniciais do hash (o mínimo nos meus testes), porque não há conclusão automática para o hash; e você não pode especificar o ramo como este: git log master -p -1 35e3. Versão Git: 1.7.9.5.
Rafael Barros
Mais um obs, mas um muito importante: novamente, você não pode especificar um ramo, mas ele pesquisa automaticamente os ramos locais e remotos quando você fornece um hash. Portanto, sim, você pode procurar um diff remoto específico antes de mesclar para o repositório local pela linha de comando.
Rafael Barros
1
Caso alguém esteja se perguntando (eu estava!), Isso também funciona com os 8 primeiros do hash, tanto no github: github.com/jerith666/git-graph/commit/35e32b6a e na linha de comando:git log -p -1 35e32b6a
SimplGy
7
É meio idiota que a interface do usuário não torne isso mais fácil do que é ... Espero que a solicitação do recurso o torne.
Ocroquette
49

Exibir confirmação única:
https://github.com/<user>/<project>/commit/<hash>

Visualizar log:
https://github.com/<user>/<project>/commits/<hash>

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

<hash> pode ter qualquer comprimento, desde que seja único.

qwertzguy
fonte
1
se o comprimento tiver pelo menos 7 caracteres, tudo bem
Kasun Siyambalapitiya
3
Sem comprimento mínimo para a cometer hash é 4 caracteres (novamente, contanto que é único em todo o repositório)
qwertzguy
21

A capacidade de pesquisar confirmações foi recentemente adicionada ao GitHub.

Para pesquisar um hash, basta digitar pelo menos os 7 primeiros caracteres na caixa de pesquisa. Em seguida, na página de resultados, clique na guia "Confirmações" para ver confirmações correspondentes (mas apenas na ramificação padrão, geralmente master) ou na guia "Problemas" para ver as solicitações pull que contêm a confirmação.

Para ser mais explícito, você pode adicionar o hash:prefixo à pesquisa, mas não é realmente necessário.

Há também uma API REST (no momento da redação, ela ainda está em visualização).

Todd Owen
fonte
2
Estou surpreso que ele realmente funcione dessa maneira. Não é tão intuitivo. Por padrão, o Github mostrará a guia "Código", obviamente sem resultados. Por padrão, não deve mostrar a única guia com resultados nela?
Sumeriana
Então, para ficar claro, se você possui sua própria instalação corporativa do github, pode encontrar qualquer commit em qualquer repositório, procurando-o da seguinte maneira: https://YourGithubDomain/search?q=YOUR_COMMIT_HASH&type=Commits Observe que eu tentei isso no Github também, e funcionou lá também, por exemplo https://github.com/search?q=38db172d13962ea177c00c9a3b4b3169b317e94b&type=Commits
Brad Parks