“Adakah anda pernah kehilangan cawangan, yang kod sumbernya belum digabungkan di cawangan‘ pelepasan ’atau cawangan‘ utama ’? Bagaimana jika anda ingin menjana semula cawangan yang dihapus walaupun kerjanya sudah digabungkan menjadi cabang utama? ' . Nah, satu-satunya penyelesaian untuk senario tersebut adalah Pergi Reflog .
Melalui artikel ini mengenai Git Reflog, saya akan membantu andafahami senario di mana kerja anda di cawangan boleh hilang dan bagaimana memulihkan cawangan.Juga, artikel ini akan menyoroti pendekatan yang boleh anda ambil untuk mencegah kehilangan cawangan yang tidak disengajakan semasa bekerja dalam projek besar.
Oleh itu, mari kita mulakan artikel ini.
Pertimbangkan senario, maintainer harus menggabungkan banyak cabang ciri dari kolaborator yang berlainan dan kemudian menghapusnya akhirnya tetapi cawangan tersebut dipadam secara tidak sengaja sebelum karya dapat digabungkan?
Baiklah, sebelum saya meneruskan artikel ini, izinkan saya memberitahu anda bahawa perkara itu tidak mungkin berlaku di Git. selamat dan bertindak sebagai pos pemeriksaan tidak akan membenarkan anda melakukannya. Jadi, di sinilah Git Reflog masuk ke dalam gambar.
Apa itu Git Reflog?
ThePerintah ‘reflog’ menyimpan a trek dari setiap perubahan yang dibuat dalam rujukan (cawangan atau tag) dari repositori dan menyimpan sejarah log cawangan dan tag yang dibuat sama ada secara tempatan atau diperiksa. Log rujukan seperti snapshot komit ketika cabang dibuat atau diklon, check-out, dinamakan semula, atau setiap komit yang dibuat di cawangan dikendalikan oleh dan disenaraikan oleh arahan ‘reflog’.
Catatan: Cabang akan dapat dipulihkan dari direktori kerja anda hanya jika cawangan itu pernah ada di repositori tempatan anda, iaitu. cawangan itu dibuat secara tempatan atau daftar keluar dari repositori jauh di repositori tempatan anda untuk Git menyimpan log sejarah rujukannya.
Perintah ini harus dilaksanakan di repositori yang mempunyai cabang yang hilang. Sekiranya anda menganggapsituasi repositori jauh, maka anda harus melaksanakan perintah reflog pada mesin pemaju yang mempunyai cawangan.
arahan: pergi reflog
Sekarang anda tahu, apa itu Git Reflog, biarkan kamicuba hapuskan cawangan yang digabungkan dan yang tidak digabungkan dan lihat bagaimana Git mengatasinya?
Langkah 1: Senaraikan cawangan yang digabungkan menjadi induk
Pertama, periksa ke dalam ‘ tuan Jika anda berada di cawangan lain menggunakan arahan:
$ git master checkout
Pengeluaran
Sekarang, untuk mendapatkan senarai cawangan gabungan, sebutkan arahan berikut:
cawangan $ git - digabungkan
Pengeluaran:
Langkah 1.1: Kemudian, padamkan cawangan yang digabungkan:
$ git cawangan -d terbitan # 902
Pengeluaran:
cara membuat rentetan rawak dalam java
Cabang ‘issue # 902’ berjaya dihapuskan kerana sudah digabungkan ke cawangan ‘master’.
Langkah 2: Sekarang, mari kita senaraikan cawangan yang tidak digabungkan menjadi induk.
cawangan $ git --tidak digabungkan
Pengeluaran
Langkah 2.2: Akhirnya, mari kita hapus cawangan yang tidak digabungkan dengan arahan berikut:
$ git cawangan -d prepod
Sekiranya anda cuba memadam salah satu cabang dengan kerja yang belum selesai, katakan cabang 'preprod', git akan memaparkan mesej amaran.
Pengeluaran
Sekarang, sebelum saya memberitahu anda bagaimana anda dapat memulihkan data artikel ini di Git Reflog, izinkan saya memberitahu anda apa sebenarnya yang berlaku apabila cawangan dihapus dan dalam keadaan apa cawangan itu dapat dipulihkan.
Bagaimana dan bila cawangan dihapuskan?
Seperti yang kita ketahui bahawa Git adalah Sistem Kawalan Versi Teragih (DVCS), setiap mesin dengan klon atau salinan repositori bertindak sebagai kedua-duanya simpul dan a hub . Inimenunjukkan bahawa setiap mesin akan mempunyai salinan kod dan sejarah repositori sendiri.Tidak perlu dikatakan anda akan menjadi berkongsi kerja anda dengan orang lain dan penerbitan sama.
Oleh itu, dalam senario seperti itu, mungkin ada 3 kes apabila cawangan dihapuskan dalam senario dunia nyata dengan banyak penyumbang mengerjakan projek besar. Perkara berikut boleh berlaku:
Kes 1 - Pembangun boleh menggabungkan atau menghapus cawangan
Pertimbangkan senario di mana pembangun menggabungkan cabang ciri ke cabang utama secara tempatan dan kemudian memadam cabang ciri menggunakan ‘ cawangan git Perintah dengan '- d 'Bendera seperti yang dilihat pada tangkapan layar sebelumnya.
Perintah: ‘Git branch -d branch_name’
Mungkin juga berlaku bahawa pembangun memutuskan untuk membuang perubahan pada cabang dan memutuskan untuk menghapus cabang tanpa menggabungkannya dengan cabang lain menggunakan perintah berikut:
Perintah: ‘Git branch -D branch_name’
Dengan arahan di atas, pembangunnya adalahpaksa cabang mengatasi amaran git secara paksa
cawangan $ git -D preprod
Pengeluaran
Catatan : Cabang ‘preprod’ tidak akan disenaraikan lagi semasa anda menjalankan perintah ‘git branch’. Jadi, ykerja kita yang disimpan di cawangan ini akan hilang.
Kes 2 - Pembangun menghapus cawangan di repositori bersama
Pertimbangkan senario, di mana pembangun dengan akses membaca / menulis cuba menghapus cawangan jauh dengan kuat olehmenggunakan arahan ‘git push’ dengan bendera ‘–hapus’.
$ git push origin --hapus perbaikan cepat
Pengeluaran
Terlepas dari ini, mungkin juga ada kes di mana pengguna yang tidak berwenang atau berniat jahat memaksa untuk menghapus cawangan terpencil.Dalam kes sedemikian, penyelenggara akan dapat memulihkan cawangan ‘quickfix’ yang dihapuskan hanya jika pemajusebelum ini telah memeriksa cawangan ini. Dalam senario ini, repositori tempatannya masih mempunyai log rujukannya.
Sekiranya penyelenggara tidak dapat memulihkan cawangan, maka pemilik cawangan yang menghapusnya mesti memulihkan dari reflog tempatannya.
Kes 3 - Skrip cangkuk dengan hak istimewa menghapus cabang
Ini mungkin merupakan senario yang jarang berlaku, tetapi kemungkinan skrip kait dipicu pada peristiwa operasi git tertentu dan paksa menghapus cabang yang belum digabungkan. Awak bolehpertimbangkan salah satu perintah yang disebutkan di atas ditulis dalam skrip cangkuk dengan hak istimewa sudo.
Sekarang, setelah anda mengetahui apa yang berlaku, apabila anda menghapus cawangan, mari teruskan artikel ini di Git Reflog dan lihat bagaimana memulihkan cawangan yang hilang.
Pulihkan cawangan yang dipadamkan menggunakan Git Reflog
Langkah 1 : Log sejarah semua rujukan
Dapatkan senarai semua log sejarah yang direkodkan tempatan untuk semua rujukan (‘master’, ‘uat’ dan ‘prepod’) di repositori ini.
pergi reflog
Langkah 2 : Kenal pasti cap sejarah
Seperti yang anda dapat lihat dari gambar di atas, Id komitmen yang diserlahkan: e2225bb bersama dengan indeks penunjuk HEAD: 4 adalah ketika ' menjual semula Cawangan telah dibuat dari penunjuk HEAD semasa yang menunjukkan karya terbaru anda.
Langkah 3 : Pulihkan
Untuk memulihkan kembali 'Jual semula Cawangan menggunakan arahan‘Git checkout’ melewati rujukan penunjuk HEAD dengan indeks id - 4.Ini adalah rujukan penunjuk ketika cabang ‘preprod’ dibuat id komit panjang yang diserlahkan dalam tangkapan skrin output.
git checkout -b preprod HEAD @ {4}
Pengeluaran
Dan voila! ' menjual semula Cawangan dipulihkan kembali dengan semua kod sumber anda.
CATATAN : Biar saya bsertakan semula arahan ‘git checkout’ yang digunakan di atas dan bantu anda memahami dengan lebih baik:
Perintah ‘git checkout’ adalah perintah yang terlalu dimuat (Sama seperti fungsi Java yang terlalu banyak). Ini adalah bahagian di mana cawangan sebenar dipulihkan.
Perintah tunggal ini pertama kali memeriksa cap waktu sejarah sebelumnya yang ditunjukkan oleh KEPALA @ {4} penunjuk dan kemudian membuat cabang dengan nama 'preprod' menggunakan pilihan '-b' serta menukar direktori kerja anda ke cabang yang baru dibuat.
Ini menunjukkan bahawa cabang yang diubah akan dari 'master' ke 'preprod' seperti yang ditunjukkan pada layar output.Anda kini boleh menggabungkannya dengan cabang ‘master’ atau ‘release’ mengikut model percabangan anda.
Sekarang, bahawa anda tahu bagaimana memulihkan cawangan, izinkan saya memberitahu anda apa kerja yang dipulihkan apabila cawangan yang dipadam dipulihkan.
Kerja apa yang dipulihkan apabila cawangan yang dipadam dipulihkan?
Fail yang disimpan dan disimpan dalam senarai indeks simpanan akan dipulihkan semula. Sebarang fail yang tidak dilacak akan hilang. Juga, it adalah idea yang baik untuk selalu membuat pentas dan melakukan kerja anda atau menyimpannya.
Untuk mengambil rujukan log dari cabang atau tag tertentu jalankan perintah - 'git reflog'.
Contoh: Untuk memeriksa rujukan log cabang ‘uat’ sahaja gunakan perintah - “git reflog uat”.
Sub-perintah Git Reflog
pergi reflog
Perintah untuk membuka halaman manual
$ git reflog --membantu
Pengeluaran
pergi reflog tunjuk
Menunjukkan log rujukan yang disediakan di baris arahan.
git reflog show master @ {0}
pergi reflog tamat
Perintah ini digunakan untuk memangkas entri reflog lama.
git reflog tamat
pergi reflog padam
Perintah ini menghapus satu entri dari sejarah reflog.
git reflog hapus
pergi reflog ada
apakah perbezaan antara kelas abstrak dan antara muka?
Perintah ini memeriksa sama ada ref (cabang atau tag) mempunyai entri sejarah log - log masuk.
git reflog ada
Selain dari perintah yang disebutkan di atas, perintah 'Git Reflog' mengambil pelbagai subkomando, dan pilihan yang berbeza bergantung pada subkomando yang disebutkan di atas. Untuk bacaan selanjutnya, jalankan “ git reflog –membantu ”Dari tingkap terminal.
Dengan ini, kami mengakhiri artikel ini mengenai Git Reflog.Tujuan DevOps adalah untuk mencipta perisian berkualiti lebih cepat dan lebih dipercayai dengan mengundang komunikasi dan kerjasama yang lebih baik antara pasukan. Sekiranya anda tertarik dengan artikel ini, c lihatlah oleh Edureka, sebuah syarikat pembelajaran dalam talian yang dipercayai dengan rangkaian lebih daripada 250,000 pelajar berpuas hati yang tersebar di seluruh dunia. Kursus Latihan Persijilan Edureka DevOps membantu pelajar memahami apa itu DevOps dan memperoleh kepakaran dalam pelbagai proses dan alat DevOps seperti Puppet, Jenkins, Nagios, Ansible, Chef, Saltstack dan GIT untuk mengautomasikan beberapa langkah dalam SDLC.
Ada soalan untuk kami? Sila sebutkan di bahagian komen artikel 'Git Reflog' dan kami akan menghubungi anda secepat mungkin.