Como obter determinadas confirmações do projeto GitHub

151

Preciso fazer o download da API do Facebook no GitHub . Normalmente, basta clicar na guia 'Downloads' para baixar o código-fonte mais recente. Nesse caso, preciso de um commit mais antigo: 91f256424531030a454548693c3a6ca49ca3f35a , mas não tenho idéia de como obter o projeto inteiro desse commit ...

Alguém pode me dizer como fazer isso?

(BTW, eu estou em um mac. Não sei se isso faz alguma diferença).

w00
fonte
1
consulte também stackoverflow.com/questions/13636559/… se "apenas" precisar do "código zipado da captura instantânea".
Jean Fontaine

Respostas:

216

Primeiro, clone o repositório usando git, por exemplo, com:

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

Isso baixa o histórico completo do repositório, para que você possa alternar para qualquer versão. Em seguida, mude para o repositório recém-clonado:

cd facebook-ios-sdk

... e use git checkout <COMMIT>para alterar para o commit correto:

git checkout 91f25642453

Isso lhe dará um aviso, já que você não está mais em uma ramificação e mudou diretamente para uma versão específica. (Isso é conhecido como estado "desanexado HEAD".) Como parece que você deseja apenas usar esse SDK, em vez de desenvolvê-lo ativamente, não é algo com que você precise se preocupar, a menos que esteja interessado em descobrir mais sobre como o git funciona.

Mark Longair
fonte
4
Neste ponto, você também pode git exportse quiser apenas os arquivos.
Xeoncross 26/09
1
git checkout -q <commit#>silencia o aviso de stderr durante a verificação do git.
Manavalan Gajapathy
Quando eu faço o check-out do git 441b034635240bc873700473af3e98533e94a0b5, isso gera um erro: fatal: reference não é uma árvore: 441b034635240bc873700473af3e98533e94a0b5
ttb
135

Não sei se estava lá quando você postou esta pergunta, mas a melhor e mais fácil maneira de baixar um commit é clicar na guia commits ao visualizar um repositório. Em vez de clicar no nome do commit, clique em Browse the repository neste ponto no botão history com o símbolo <> no lado direito do nome / mensagem do commit e, finalmente, no botão Download ZIP que aparece quando você clica em Clone ou Botão Download .

Espero que ajude vocês.

Sivan
fonte
3
Essa é a única maneira de recuperar "confirmações perdidas", que são confirmadas pelas quais o github tem um histórico, mas foram apagadas da linha do tempo "oficial" do git. Usando isso, você pode obter um instantâneo zip de uma confirmação que foi rebased no esquecimento, enviar essa confirmação para uma nova ramificação, buscar essa ramificação em um repositório existente e selecioná-la novamente.
Ajax
@ Ajax Isso não é verdade. Você ainda pode obter o sha usando git reflog, e depois fazer o checkout da destacada comprometer
Aaron Brager
@AaronBrager com certeza, o reflog funcionará, se você estiver na mesma máquina que teve o commit inicialmente. O OP já conhece o commit, então eles não precisariam de reflog e poderiam fazer o checkout diretamente. No entanto, estou falando de casos em que você não possui o commit localmente, e ele não está em nenhum ramo que ainda esteja no repositório público. Nesses casos, o github ainda pode ter um registro da confirmação, que pode ser baixada como um zip para recuperar a confirmação.
Ajax
@ Ajax Ah, obrigado pelo esclarecimento. Como alternativa, você pode bater a API GitHub ( api.github.com/repos/facebook/facebook-ios-sdk/events ) e criar um ramo da órfãs commit ( instruções aqui )
Aaron Brager
Muito agradável. +1 Eu não sabia que você poderia consultar o reflog do github assim!
Ajax
27

A resposta de Sivan em gif insira a descrição da imagem aqui

1.Clique em confirmações no github

2. Selecione Procurar código no lado direito de cada confirmação

3.Clique no zip de download, que fará o download do código-fonte no momento da confirmação

Suraj K Thomas
fonte
Olá suraj, por favor, me diga como você criou o gif da sua tela?
Rahul Satal
usar o jogador rápido tempo para gravar um vídeo de conversão screen.Do de vídeo para gif usando qualquer ferramenta disponível .google-lo @ Rahul Satal.
Suraj K Thomas
1
Obrigado @SurajKThomas pelo gif #
Sivan
10

Para baixar apenas uma confirmação usando o formulário abreviado de 7 dígitos SHA1, faça:

Exemplo de trabalho:

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

Descrição:

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

Se você tiver a chave hash longa 31af650ee25f65794b75d4dfefed6fe4758781c1, obtenha os 7 primeiros caracteres 31af650. É o padrão para o GitHub.

user1767754
fonte
8

A maneira mais fácil de recuperar uma confirmação perdida (que existe apenas no github e não localmente) é criar uma nova ramificação que inclua essa confirmação.

  1. Abra o commit (url como: github.com/org/repo/commit/long-commit-sha)
  2. Clique em "Procurar arquivos" no canto superior direito
  3. Clique no menu suspenso "Árvore: short-sha ..." no canto superior esquerdo
  4. Digite um novo nome de filial
  5. git pull o novo ramo até o local
Jeff
fonte
Esta resposta é mais geral que a aceita. Eu conheci essa situação em que o commit que eu queria já desapareceu na ramificação principal e o Github não manterá todas as confirmações em ramificações inexistentes. Portanto, essa abordagem criará um novo ramo a partir desse commit no Github e o tornará extraível.
Qi Luo
Isso me permitiu recuperar um commit (com o SHA original intacto) de um fork excluído do qual fiz um PR. Depois de criar uma nova bifurcação, abri o commit de PR no repositório upstream e depois "naveguei nos arquivos". Copiei esse URL e substitui o nome de usuário pelo meu. Em seguida, clique no menu suspenso Árvore: e crie um novo ramo no meu garfo. Trabalhou muito bem!
Allen Luce
2

O título da pergunta é ambíguo.

Id2ndR
fonte
1

Como complemento à resposta aceita:

Para ver os hashes, você precisa usar o comando sugerido "git checkout hash ", você pode usargit log . No entanto, dependendo do que você precisa, existe uma maneira mais fácil do que copiar / colar hashes.

Você pode usar git log --oneline para ler muitas mensagens de confirmação em um formato mais compactado.

Digamos que você veja uma lista de uma linha dos commits com informações mínimas e apenas hashes parcialmente visíveis:

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

Se você quiser last commit, você pode usar git checkout master^. O ^dá a você o commit antes do master. assimhash222 .

Se você quiser a n-ésima última confirmação, poderá usar git checkout master~n. Por exemplo, usando git checkout master~2você daria o commit hash333.

Benjamin Basmaci
fonte
0

Em vez de navegar pelas confirmações, você também pode pressionar a ytecla ( Ajuda do Github , Atalhos de teclado ) para obter o "link permanente" para a revisão / confirmação atual.
Isso mudará o URL de https://github.com/<user>/<repository>(master / HEAD) para https://github.com/<user>/<repository>/tree/<commit id>.

Para fazer o download do commit específico, você precisará recarregar a página a partir desse URL, para que o Clone or Downloadbotão aponte para o "instantâneo" em https://github.com/<user>/<repository>/archive/<commit id>.zip vez do mais recente https://github.com/<user>/<repository>/archive/master.zip.

lidar com
fonte
0

Tente a seguinte sequência de comandos:

$ git fetch origin <copy/past commit sha1 here>
$ git checkout FETCH_HEAD
$ git push origin master
Md. Rana
fonte
-1

Se você deseja executar um determinado commit ou deseja codificar um determinado commit, pode usar o comando abaixo:

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

Exemplo:

 git reset --hard fbee9dd 
 git push --force
Shubham Verma
fonte
2
Isso é perigoso, não faz mais sentido para clonar o repo e check-out uma versão
user1767754