Jak uzyskać pewne zatwierdzenie z projektu GitHub

151

Muszę pobrać interfejs API Facebooka z GitHub . Zwykle po prostu klikam kartę „Pobieranie”, aby pobrać najnowszy kod źródłowy. W tym przypadku potrzebuję starszego zatwierdzenia: 91f256424531030a454548693c3a6ca49ca3f35a , ale nie mam pojęcia, jak uzyskać cały projekt z tego zatwierdzenia ...

Czy ktoś może mi powiedzieć, jak to zrobić?

(Przy okazji, jestem na komputerze Mac. Nie wiem, czy to robi jakąkolwiek różnicę).

w00
źródło
1
zobacz także stackoverflow.com/questions/13636559/ ... jeśli potrzebujesz „tylko” „zip-snapshot-code”.
Jean Fontaine,

Odpowiedzi:

216

Najpierw sklonuj repozytorium za pomocą gita, np .:

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

Spowoduje to pobranie pełnej historii repozytorium, dzięki czemu możesz przełączyć się na dowolną wersję. Następnie przejdź do nowo sklonowanego repozytorium:

cd facebook-ios-sdk

... i użyj, git checkout <COMMIT>aby zmienić na właściwy commit:

git checkout 91f25642453

To da ci ostrzeżenie, ponieważ nie jesteś już w gałęzi i przełączyłeś się bezpośrednio na konkretną wersję. (Nazywa się to stanem „odłączonego HEAD”). Ponieważ brzmi to tak, jakbyś chciał używać tylko tego zestawu SDK, a nie go aktywnie rozwijać, nie musisz się tym martwić, chyba że chcesz się dowiedzieć więcej o tym, jak działa git.

Mark Longair
źródło
4
W tym momencie możesz również, git exportjeśli chcesz tylko pliki.
Xeoncross
1
git checkout -q <commit#>ucisza ostrzeżenie stderr podczas sprawdzania gita.
Manavalan Gajapathy
Kiedy robię git checkout 441b034635240bc873700473af3e98533e94a0b5, pojawia się błąd: fatal: reference is a tree: 441b034635240bc873700473af3e98533e94a0b5
ttb
135

Nie wiem, czy było tam, kiedy opublikowałeś to pytanie, ale najlepszym i najłatwiejszym sposobem pobrania zatwierdzenia jest kliknięcie zakładki zatwierdzeń podczas przeglądania repozytorium. Następnie zamiast klikać nazwę zatwierdzenia, kliknij Przeglądaj repozytorium w tym miejscu na przycisku historii z symbolem <> po prawej stronie nazwy / komunikatu zmiany, a na końcu przycisk Pobierz ZIP , który pojawia się po kliknięciu Klonuj lub Przycisk pobierania .

Mam nadzieję, że wam to pomoże.

Sivan
źródło
3
To jedyny sposób na odzyskanie „utraconych zatwierdzeń”, które są zatwierdzeniami, których github ma historię, ale zostały usunięte z „oficjalnej” osi czasu gita. Korzystając z tego, możesz uzyskać migawkę zip zatwierdzenia, który został zmieniony w zapomnienie, wypchnąć to zatwierdzenie do nowej gałęzi, pobrać tę gałąź do istniejącego repozytorium i przywrócić ją do istnienia.
Ajax,
@Ajax To nieprawda. Nadal możesz użyć sha git reflog, a następnie
sprawdzić
@AaronBrager z pewnością, reflog będzie działał, JEŚLI jesteś na tym samym komputerze, na którym początkowo było zatwierdzenie. Operator operacyjny zna już zatwierdzenie, więc nie potrzebowałby reflogu i mógłby po prostu bezpośrednio zapłacić. Jednak mówię o przypadkach, w których nie masz lokalnego zatwierdzenia i nie ma go w żadnej gałęzi, która nadal znajduje się w publicznym repozytorium. W takich przypadkach github może nadal mieć zapis zatwierdzenia, który można pobrać jako plik zip, aby móc odzyskać to zatwierdzenie.
Ajax
@ Ajax Ah, dzięki za wyjaśnienie. Alternatywnie możesz skorzystać z API GitHub ( api.github.com/repos/facebook/facebook-ios-sdk/events ) i utworzyć gałąź z osieroconego zatwierdzenia ( instrukcje tutaj )
Aaron Brager
Bardzo dobrze. +1 Nie wiedziałem, że możesz zapytać o reflog githuba w ten sposób!
Ajax
27

Odpowiedź Sivana w formacie gif wprowadź opis obrazu tutaj

1. Kliknij commits na githubie

2. Wybierz Przeglądaj kod po prawej stronie każdego zatwierdzenia

3. Kliknij download zip, który pobierze kod źródłowy w momencie zatwierdzenia

Suraj K. Thomas
źródło
Witaj suraj, czy możesz mi powiedzieć, w jaki sposób stworzyłeś gif swojego ekranu?
Rahul Satal
użyj odtwarzacza quick time player, aby nagrać wideo z ekranu.Do konwersji wideo do gif za pomocą dowolnego dostępnego narzędzia .Google it. @ Rahul Satal
Suraj K Thomas
1
Dzięki @SurajKThomas za gif
Sivan
10

Aby pobrać zatwierdzenie za pomocą 7-cyfrowego skróconego formularza SHA1, wykonaj:

Przykład roboczy:

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

Opis:

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

Jeśli masz długi klucz krzyżyka 31af650ee25f65794b75d4dfefed6fe4758781c1, po prostu pobierz pierwsze 7 znaków 31af650. Jest to ustawienie domyślne dla GitHub.

user1767754
źródło
8

Najłatwiejszym sposobem odzyskania utraconego zatwierdzenia (który istnieje tylko na github, a nie lokalnie) jest utworzenie nowej gałęzi, która zawiera to zatwierdzenie.

  1. Otwórz zatwierdzenie (adres URL taki jak: github.com/org/repo/commit/long-commit-sha)
  2. Kliknij „Przeglądaj pliki” w prawym górnym rogu
  3. Kliknij menu „Drzewo: short-sha ...” w lewym górnym rogu
  4. Wpisz nową nazwę oddziału
  5. git pull nowy oddział do lokalnego
Jeff
źródło
Ta odpowiedź jest bardziej ogólna niż ta przyjęta. Spotkałem się z tą sytuacją, że zatwierdzenie, które chciałem, zniknęło już na gałęzi głównej, a Github nie będzie przechowywać wszystkich zatwierdzeń na nieistniejących gałęziach. Więc to podejście stworzy nową gałąź z tego zatwierdzenia na Github i sprawi, że będzie można ją pobrać.
Qi Luo,
To pozwoliło mi odzyskać zatwierdzenie (z nienaruszonym oryginalnym SHA) z usuniętego rozwidlenia, z którego zrobiłem PR. Po utworzeniu nowego rozwidlenia otworzyłem zatwierdzenie PR w repozytorium, a następnie „przeglądałem pliki”. Następnie skopiowałem ten adres URL i zastąpiłem nazwę użytkownika własną. Następnie kliknąłem menu Drzewo: i utworzyłem nową gałąź w moim widelcu. Działało świetnie!
Allen Luce,
2

Tytuł pytania jest niejednoznaczny.

Id2ndR
źródło
1

Jako dodatek do zaakceptowanej odpowiedzi:

Aby zobaczyć skróty, musisz użyć sugerowanego polecenia „git checkout hash ”, którego możesz użyć git log. Jednak w zależności od potrzeb jest łatwiejszy sposób niż kopiowanie / wklejanie skrótów.

Możesz użyć git log --onelinedo czytania wielu komunikatów o zmianach w bardziej skompresowanym formacie.

Powiedzmy, że widzisz to jednowierszową listę zatwierdzeń z minimalną ilością informacji i tylko częściowo widocznymi skrótami:

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

Jeśli chcesz last commit, możesz użyć git checkout master^. To ^daje ci zatwierdzenie przed mistrzem. A więc hash222.

Jeśli chcesz n-tego ostatniego zatwierdzenia, możesz użyć git checkout master~n. Na przykład użycie git checkout master~2dałoby ci zatwierdzenie hash333.

Benjamin Basmaci
źródło
0

Zamiast nawigować po zatwierdzeniach, możesz również nacisnąć yklawisz ( Pomoc Github , Skróty klawiaturowe ), aby uzyskać „link bezpośredni” dla bieżącej wersji / zatwierdzenia.
Spowoduje to zmianę adresu URL z https://github.com/<user>/<repository>(master / HEAD) na https://github.com/<user>/<repository>/tree/<commit id>.

Aby pobrać określone zatwierdzenie, musisz ponownie załadować stronę z tego adresu URL, aby Clone or Downloadprzycisk wskazywał „migawkę” https://github.com/<user>/<repository>/archive/<commit id>.zip zamiast najnowszej https://github.com/<user>/<repository>/archive/master.zip.

uchwyt
źródło
0

Wypróbuj następującą sekwencję poleceń:

$ git fetch origin <copy/past commit sha1 here>
$ git checkout FETCH_HEAD
$ git push origin master
Md. Rana
źródło
-1

Jeśli chcesz przejść z jakimkolwiek określonym zatwierdzeniem lub chcesz zakodować dowolny określony zatwierdzenie, możesz użyć poniższego polecenia:

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

Przykład:

 git reset --hard fbee9dd 
 git push --force
Shubham Verma
źródło
2
To niebezpieczne, bardziej sensowne jest sklonowanie repozytorium i
pobranie