Cara mendapatkan komitmen tertentu dari proyek GitHub

151

Saya perlu mengunduh API Facebook dari GitHub . Biasanya, saya cukup klik pada tab 'Unduhan "untuk mengunduh kode sumber terbaru. Dalam hal ini, saya memerlukan komit yang lebih lama: 91f256424531030a454548693c3a6ca49ca3f35a , tetapi saya tidak tahu cara mendapatkan seluruh proyek dari komit itu ...

Bisakah seseorang tolong beri tahu saya cara melakukan ini?

(BTW, saya di mac. Tidak tahu apakah itu membuat perbedaan).

w00
sumber
1
silakan lihat juga stackoverflow.com/questions/13636559/... jika Anda "hanya" memerlukan "zip-snapshot-code".
Jean Fontaine

Jawaban:

216

Pertama, klon repositori menggunakan git, misalnya dengan:

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

Itu mengunduh riwayat lengkap repositori, sehingga Anda dapat beralih ke versi apa pun. Selanjutnya, ubah ke repositori yang baru dikloning:

cd facebook-ios-sdk

... dan gunakan git checkout <COMMIT>untuk mengubah ke komit yang tepat:

git checkout 91f25642453

Itu akan memberi Anda peringatan, karena Anda tidak lagi di cabang, dan telah beralih langsung ke versi tertentu. (Ini dikenal sebagai keadaan "HEAD terpisah".) Karena kedengarannya seolah-olah Anda hanya ingin menggunakan SDK ini, daripada secara aktif mengembangkannya, ini bukan sesuatu yang perlu Anda khawatirkan, kecuali jika Anda tertarik untuk mencari tahu lebih lanjut tentang cara kerja git.

Mark Longair
sumber
4
Pada titik ini Anda juga dapat git exportjika Anda hanya ingin file.
Xeoncross
1
git checkout -q <commit#>membungkam stderr peringatan selama checkout git.
Manavalan Gajapathy
Ketika saya melakukan checkout git 441b034635240bc873700473af3e98533e94a0b5, ini memberikan kesalahan: fatal: referensi bukan pohon: 441b034635240bc873700473af3e98533e94a0b5
ttb
135

Saya tidak tahu apakah itu ada di sana ketika Anda memposting pertanyaan ini, tetapi cara terbaik dan termudah untuk mengunduh komit adalah dengan mengklik pada tab commit ketika melihat repositori. Kemudian alih-alih mengklik pada nama komit, klik pada Jelajahi repositori pada titik ini di tombol riwayat dengan simbol <> di sebelah kanan nama komit / pesan, dan akhirnya pada tombol Unduh ZIP yang muncul ketika Anda mengklik Klon atau Tombol unduh .

Saya harap ini membantu kalian.

Sivan
sumber
3
Ini adalah satu-satunya cara untuk memulihkan "komit yang hilang" yang menyatakan bahwa github memang memiliki sejarah, tetapi dihapus dari garis waktu git "resmi". Dengan menggunakan ini, Anda bisa mendapatkan snapshot zip dari komit yang diubah menjadi dilupakan, mendorong komit itu ke cabang baru, mengambil cabang itu ke repo yang ada, dan memetiknya kembali menjadi ada.
Ajax
@Ajax Itu tidak benar. Anda masih bisa mendapatkan sha menggunakan git reflog, dan kemudian checkout komit terpisah
Aaron Brager
@ AaronBrager yakin, reflog akan bekerja, JIKA Anda berada di mesin yang sama yang awalnya memiliki komit. OP sudah mengetahui komit, sehingga mereka tidak perlu reflog dan bisa langsung checkout. Namun, saya berbicara tentang kasus-kasus di mana Anda tidak memiliki komit secara lokal, dan itu bukan pada cabang mana pun yang masih dalam repo publik. Dalam kasus ini, github mungkin masih memiliki catatan komit, yang dapat Anda unduh sebagai zip untuk dapat memulihkan komit tersebut.
Ajax
@Ajax Ah, terima kasih atas klarifikasi. Sebagai alternatif, Anda dapat menekan API GitHub ( api.github.com/repos/facebook/facebook-ios-sdk/events ) dan membuat cabang dari komit yatim ( instruksi di sini )
Aaron Brager
Sangat bagus. +1 Saya tidak tahu Anda bisa meminta reflog github seperti itu!
Ajax
27

Jawaban Sivan dalam gif masukkan deskripsi gambar di sini

1. Klik komit di github

2. Pilih Telusuri kode di sebelah kanan setiap komit

3. Klik pada zip pengunduhan, yang akan mengunduh kode sumber pada saat komit

Suraj K Thomas
sumber
Halo suraj dapatkah Anda memberi tahu saya bagaimana Anda membuat gif layar Anda?
Rahul Satal
gunakan pemutar waktu cepat untuk merekam video layar. Lakukan konversi video ke gif menggunakan alat apa pun yang tersedia. Google itu. @ Rahul Satal
Suraj K Thomas
1
Terima kasih @SurajKThomas untuk gif
Sivan
10

Untuk mengunduh komit menggunakan formulir pendek SHA1 7 digit, lakukan:

Contoh kerja:

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

Deskripsi:

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

Jika Anda memiliki kunci hash panjang 31af650ee25f65794b75d4dfefed6fe4758781c1, dapatkan 7 karakter pertama 31af650. Ini default untuk GitHub.

pengguna1767754
sumber
8

Cara termudah yang saya temukan untuk memulihkan komit yang hilang (yang hanya ada di github dan bukan lokal) adalah membuat cabang baru yang menyertakan komit ini.

  1. Miliki komit terbuka (url seperti: github.com/org/repo/commit/long-commit-sha)
  2. Klik "Jelajahi File" di kanan atas
  3. Klik tarik turun "Tree: short-sha ..." di kiri atas
  4. Ketikkan nama cabang baru
  5. git pull cabang baru ke lokal
Jeff
sumber
Jawaban ini lebih umum daripada yang diterima. Saya bertemu situasi ini bahwa komit yang saya inginkan sudah hilang di cabang utama, dan Github tidak akan menjaga setiap komitmen pada cabang yang tidak ada. Jadi pendekatan ini akan membuat cabang baru dari komit di Github dan membuatnya menarik.
Qi Luo
Ini memungkinkan saya untuk memulihkan komit (dengan SHA asli utuh) dari garpu yang dihapus dari mana saya melakukan PR. Setelah membuat garpu baru, saya membuka commit PR pada repo hulu lalu melakukan "browse file." Saya kemudian menyalin URL itu dan mengganti nama pengguna dengan milik saya. Kemudian mengklik Tree: dropdown dan membuat cabang baru di garpu saya. Bekerja dengan baik!
Allen Luce
2

Judul pertanyaan tidak jelas.

Id2ndR
sumber
1

Sebagai tambahan untuk jawaban yang diterima:

Untuk melihat hash Anda perlu menggunakan perintah yang disarankan "git checkout hash ", Anda dapat menggunakangit log . Di mana pun, tergantung pada apa yang Anda butuhkan, ada cara yang lebih mudah daripada menyalin / menempelkan hash.

Anda dapat menggunakan git log --onelineuntuk membaca banyak pesan komit dalam format yang lebih padat.

Katakanlah Anda melihat ini komit satu baris dengan informasi minimal dan hanya hash yang terlihat sebagian:

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

Jika mau last commit, Anda bisa menggunakan git checkout master^. The ^memberi Anda komit sebelum master. Jadi hash222.

Jika Anda ingin komit terakhir ke-n, Anda dapat menggunakan git checkout master~n. Misalnya, menggunakan git checkout master~2akan memberi Anda komit hash333.

Benjamin Basmaci
sumber
0

Alih-alih menavigasi komit, Anda juga dapat menekan ytombol ( Bantuan Github , Pintasan Keyboard ) untuk mendapatkan "permalink" untuk revisi / komit saat ini.
Ini akan mengubah URL dari https://github.com/<user>/<repository>(master / HEAD) ke https://github.com/<user>/<repository>/tree/<commit id>.

Untuk mengunduh komit tertentu, Anda perlu memuat ulang halaman dari URL itu, sehingga Clone or Downloadtombol akan menunjuk ke "snapshot" https://github.com/<user>/<repository>/archive/<commit id>.zip alih-alih yang terbaru https://github.com/<user>/<repository>/archive/master.zip.

menangani
sumber
0

Coba urutan perintah berikut:

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

Jika Anda ingin pergi dengan komit tertentu atau ingin kode komit tertentu maka Anda dapat menggunakan perintah di bawah ini:

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

Contoh:

 git reset --hard fbee9dd 
 git push --force
Shubham Verma
sumber
2
Ini berbahaya, lebih masuk akal untuk mengkloning repo dan checkout versi
user1767754