Saya mengkloning repositori git jarak jauh sekitar sebulan yang lalu. Repositori jarak jauh telah mengalami banyak perubahan dan sekarang menjadi tidak stabil. Sekarang saya perlu salinan repositori, versi yang identik dengan yang saya kloning sebulan yang lalu.
Bagaimana saya melakukan ini?
Jawaban:
Anda dapat "mengatur ulang" repositori Anda ke komit yang Anda inginkan (mis. 1 bulan yang lalu).
Gunakan git-reset untuk itu:
sumber
master
cabang, yang diperiksa secara default pada klon. Jika cabang selainmaster
cabang pengembangan utama Anda yang harus diperiksa terlebih dahulugit reset
git checkout -b new_branch hash
Anda membuat cabang baru berdasarkan hash tanpa menyentuh cabang lainnya. Memindahkan kepala cabang yang ada dapat menyebabkan masalah ketika saatnya untuk mendorong sesuatu ke server jauh.git pull origin [branch]
sebaliknya, afaik, yang hilang.Anda dapat menggunakannya secara sederhana
dalam urutan ini
komit hash terlihat seperti ini "45ef55ac20ce2389c9180658fdba35f4a663d204"
sumber
git reset --hard
harus dihindari, mendukung agit checkout commit-hash
. Agit reset --hard
menghapus bagian dari sejarah git yang terkadang tidak diinginkan.git init
tidak perluGunakan
git log
untuk menemukan revisi yang ingin Anda kembalikan, dan catat hash komit. Setelah itu, Anda memiliki 2 opsi:Jika Anda berencana untuk melakukan sesuatu setelah revisi itu, saya sarankan Anda untuk checkout ke cabang baru:
git checkout -b <new_branch_name> <hash>
Jika Anda tidak berencana untuk melakukan apa pun setelah revisi itu, Anda dapat checkout tanpa cabang:
git checkout <hash>
- CATATAN: Ini akan menempatkan repositori Anda dalam keadaan 'terlepas kepala', yang berarti saat ini tidak terpasang ke cabang mana pun - maka Anda ' Saya akan memiliki beberapa pekerjaan tambahan untuk menggabungkan komitmen baru ke cabang aktual .Contoh:
Dengan begitu Anda tidak kehilangan informasi apa pun, sehingga Anda dapat pindah ke revisi yang lebih baru ketika menjadi stabil.
sumber
git checkout develop
mengembangkan nama cabang Anda.Jika versi yang Anda butuhkan adalah cabang atau tag, maka:
sumber
Tidak seperti sistem kontrol versi terpusat, Git mengkloning seluruh repositori, jadi Anda tidak hanya mendapatkan file jarak jauh saat ini, tetapi juga seluruh riwayat. Repositori lokal Anda akan menyertakan semua ini.
Mungkin ada tag untuk menandai versi tertentu pada saat itu. Jika tidak, Anda dapat membuatnya sendiri secara lokal. Cara yang baik untuk melakukan ini adalah dengan menggunakan
git log
atau mungkin lebih secara visual dengan alat sepertigitk
(mungkingitk --all
untuk melihat semua cabang dan tag). Jika Anda dapat menemukan hash komit yang digunakan pada saat itu, Anda dapat menandai mereka menggunakangit tag <hash>
dan kemudian memeriksanya dalam copy pekerjaan baru (misalnyagit checkout -b new_branch_name tag_name
atau langsung dengan hash bukan nama tag).sumber
Anda dapat menyelesaikannya seperti ini:
dimana
sha
mis:85a108ec5d8443626c690a84bc7901195d19c446
Anda bisa mendapatkan sha yang diinginkan dengan perintah:
sumber
uploadpack.allowReachableSHA1InWant
Karena Git 2.5.0 variabel konfigurasi ini dapat diaktifkan di server, di sini permintaan fitur GitHub dan komit GitHub mengaktifkan fitur ini .
Bitbucket Server mengaktifkannya sejak versi 5.5+ .
Pemakaian:
sumber
Source tree yang Anda perlukan masih tersedia di repositori git, namun, Anda memerlukan SHA1 dari commit yang Anda minati. Saya berasumsi bahwa Anda bisa mendapatkan SHA1 dari klon saat ini yang Anda miliki?
Jika Anda bisa mendapatkan SHA1 itu, Anda bisa membuat cabang / reset di sana untuk memiliki repositori yang sama.
Perintah sesuai jawaban Rui
sumber
Mungkin
git reset
memecahkan masalah Anda.sumber