Artikel ini membawa anda pengetahuan yang berkaitan tentang prinsip kerja Git terutamanya menggunakan gambar dan teks untuk menerangkan secara terperinci.
Artikel ini menggambarkan arahan yang paling biasa digunakan dalam Git. Jika anda memahami serba sedikit tentang cara Git berfungsi, artikel ini boleh memberi anda pemahaman yang lebih menyeluruh.
Empat perintah di atas menyalin fail antara direktori kerja, direktori pementasan (juga dipanggil indeks) dan gudang.
git add files meletakkan fail semasa ke dalam kawasan pementasan.
git commit menjana gambar kawasan pementasan dan menyerahkannya.
git reset – fail digunakan untuk membuat asal git add files Anda juga boleh menggunakan git reset untuk membatalkan semua fail kawasan pementasan.
git checkout – fail menyalin fail dari kawasan pementasan ke direktori kerja untuk membuang pengubahsuaian tempatan.
Anda boleh menggunakan git reset -p, git checkout -p, atau git add -p untuk memasuki mod interaktif.
Anda juga boleh melangkau kawasan pementasan dan terus mengambil fail dari gudang atau menyerahkan kod terus.
git commit -a adalah bersamaan dengan menjalankan git add untuk menambah semua fail dalam direktori semasa ke kawasan pementasan dan kemudian jalankannya.
fail komit git membuat komit yang mengandungi komit terakhir serta petikan fail dalam direktori kerja. Dan fail itu ditambah ke kawasan pementasan.
git checkout HEAD – fail digulung semula untuk menyalin komit terakhir.
Imej akan digunakan dalam bentuk berikut dalam teks berikut.
Aksara 5 digit hijau mewakili ID yang diserahkan, yang masing-masing menunjuk ke nod induk. Cawangan ditunjukkan dalam oren dan menunjuk kepada komitmen tertentu. Cawangan semasa dikenal pasti oleh HEAD yang dilampirkan padanya. Gambar ini menunjukkan 5 hantaran terakhir, ed489 adalah hantaran terkini. Cawangan induk menunjuk ke komit ini, dan cawangan utama yang lain menghala ke nod komit datuk nenek.
Beza
Terdapat banyak cara untuk melihat perubahan antara komitmen, berikut ialah beberapa contoh.
Komit
Apabila menyerahkan, Git mencipta penyerahan baharu menggunakan fail dalam kawasan pementasan dan meletakkan nod pada masa itu Tetapkan sebagai nod induk. Kemudian arahkan cawangan semasa ke nod komit baharu. Dalam gambar di bawah, cawangan semasa ialah induk. Sebelum menjalankan arahan, master menunjuk ke ed489 Selepas penyerahan, master menunjuk ke nod baharu f0cec dengan ed489 sebagai nod induk.
Walaupun cawangan semasa ialah nod datuk nenek bagi penyerahan tertentu, git akan beroperasi dengan cara yang sama. Dalam rajah di bawah, komit dibuat pada cawangan utama, nod datuk cawangan induk, dan 1800b dijana. Dengan cara ini, cawangan induk bukan lagi datuk nenek kepada cawangan induk. Pada masa ini, penggabungan [1] (atau pengasingan semula [2]) adalah perlu.
Jika anda ingin menukar komit, gunakan git commit –amend. Git akan membuat komit baharu menggunakan nod induk yang sama seperti komit semasa, dan komit lama akan dibatalkan.
Contoh lain ialah mengasingkan penyerahan HEAD [3], yang akan dibincangkan kemudian.
Checkout
Arahan Checkout digunakan untuk menyalin fail daripada penyerahan sejarah (atau kawasan pementasan) ke direktori kerja, dan juga boleh digunakan untuk menukar cawangan.
Apabila nama fail diberikan (sama ada pilihan -p dihidupkan, atau nama fail dan pilihan -p dihidupkan pada masa yang sama), Git akan menyalin fail daripada komit yang ditentukan ke kawasan pementasan dan direktori kerja. Sebagai contoh, git checkout HEAD~ foo.c akan menyalin foo.c dalam nod penyerahan HEAD~ (iaitu, nod induk nod penyerahan semasa) ke direktori kerja dan menambahnya ke kawasan pementasan. (Jika tiada nod komit dinyatakan dalam arahan, kandungan akan disalin dari kawasan pementasan.) Ambil perhatian bahawa cawangan semasa tidak akan berubah.
Apabila nama fail tidak dinyatakan, tetapi cawangan (tempatan) diberikan, maka pengecam HEAD akan dialihkan ke cawangan itu (iaitu, kita "bertukar" ke cawangan itu), dan kemudian kawasan pementasan dan berfungsi direktori Kandungan dalam akan konsisten dengan nod penyerahan yang sepadan dengan HEAD. Semua fail dalam nod penyerahan baharu (a47c3 dalam rajah di bawah) akan disalin (ke kawasan pementasan dan direktori kerja yang hanya wujud dalam nod penyerahan lama (ed489) akan dipadamkan; di atas dua fail akan diabaikan dan tidak terjejas.
Jika nama fail mahupun nama cawangan tidak dinyatakan, tetapi teg, cawangan jauh, nilai SHA-1 atau sesuatu yang serupa seperti master~3, Anda mendapat nama tanpa nama cawangan yang dipanggil HEAD tertanggal (pengecam HEAD tertanggal). Ini memudahkan anda menukar antara versi sejarah. Sebagai contoh, jika anda ingin menyusun versi 1.6.6.1 Git, anda boleh menjalankan git checkout v1.6.6.1 (ini adalah label, bukan nama cawangan), menyusun, memasang dan kemudian bertukar kembali ke cawangan lain, seperti sebagai git checkout master. Walau bagaimanapun, apabila operasi komit melibatkan "KEPALA terpisah", tingkah lakunya berbeza sedikit, seperti yang diperincikan di bawah.
Ikuti akaun awam "Java Backend Technology Full Stack", balas temu duga dan dapatkan maklumat temu duga berkualiti tinggi
Apabila Logo HEAD berada dalam keadaan tertanggal Operasi komit
Apabila HEAD berada dalam keadaan terpisah (tidak dilampirkan pada mana-mana cawangan), operasi komit boleh diteruskan seperti biasa, tetapi mana-mana cawangan yang dinamakan tidak akan dikemas kini. (Anda boleh menganggap ini sebagai mengemas kini cawangan tanpa nama.)
Setelah anda bertukar ke cawangan lain, seperti induk, maka nod komit ini (mungkin) tidak lagi tersedia Ia tidak akan dirujuk dan akan dibuang. Ambil perhatian bahawa tiada apa yang akan merujuk 2eecb selepas arahan ini.
Walau bagaimanapun, jika anda ingin menyimpan keadaan ini, anda boleh menggunakan arahan git checkout -b name untuk mencipta cawangan baharu. Perintah Reset menghalakan cawangan semasa ke lokasi lain dan secara pilihan menukar direktori kerja dan indeks. Juga digunakan untuk menyalin fail dari repositori sejarah ke indeks tanpa menyentuh direktori kerja.
Jika tiada pilihan diberikan, cawangan semasa menunjukkan komitmen itu. Jika pilihan –hard digunakan, direktori kerja juga dikemas kini, dan jika pilihan –soft digunakan, ia kekal tidak berubah.
Jika nombor versi titik komit tidak diberikan, HEAD akan digunakan secara lalai. Dengan cara ini, titik cawangan kekal tidak berubah, tetapi indeks akan digulung semula ke komit terakhir Jika pilihan –hard digunakan, perkara yang sama berlaku untuk direktori kerja.
Jika nama fail (atau pilihan -p) diberikan, kesan kerja adalah serupa dengan daftar keluar dengan nama fail, kecuali indeks dikemas kini.Gabung
Arahan Gabung menggabungkan cawangan yang berbeza. Sebelum bergabung, indeks mestilah sama dengan komit semasa. Jika cawangan lain ialah datuk nenek komit semasa, arahan gabungan tidak akan melakukan apa-apa. Situasi lain ialah jika komit semasa ialah datuk nenek cawangan lain, menyebabkan penggabungan ke hadapan pantas. Penunjuk hanya dialihkan dan komit baharu dihasilkan.
Jika tidak, ia adalah gabungan sebenar. Secara lalai, gabungan tiga hala dilakukan antara komit semasa (ed489 ditunjukkan di bawah) dan komit lain (33104) dan nod datuk nenek sepunya mereka (b325c) [4]. Hasilnya adalah untuk menyimpan direktori dan indeks semasa dahulu, dan kemudian membuat komitmen baharu bersama-sama dengan nod induk 33104.
Cherry Pick
Arahan cherry-pick "menyalin" nod komit dan membuat komit baharu yang sama pada cawangan semasa .
Rebase
Rebasing ialah alternatif kepada perintah penggabungan. Gabung menggabungkan dua cabang induk menjadi satu komit, dan sejarah komit tidak linear. Basing semula memainkan semula sejarah cawangan lain pada cawangan semasa, dan sejarah komit adalah linear. Pada asasnya, ini adalah pemetik ceri automatik linear.
Arahan di atas semuanya dilakukan dalam cawangan topik, bukan cawangan induk, ulangi pada cawangan induk dan halakan cawangan ke nod baharu. Ambil perhatian bahawa komit lama tidak dirujuk dan akan dikitar semula.
Untuk mengehadkan skop rollback, gunakan pilihan –onto. Perintah berikut memainkan semula beberapa komit terakhir cawangan semasa sejak 169a6 pada cawangan induk, iaitu 2c33a.
Terdapat juga git rebase –interactive, yang membolehkan anda menyelesaikan beberapa operasi kompleks dengan lebih mudah, seperti membuang, menyusun semula, mengubah suai dan menggabungkan komit. Tiada gambar yang menunjukkan ini, lihat di sini untuk butiran: git-rebase(1)[5].
Kandungan fail sebenarnya tidak disimpan dalam indeks (.git/index) atau objek penyerahan, tetapi disimpan dalam pangkalan data (.git/objek) dalam bentuk gumpalan dan ditentukur menggunakan SHA -1 nilai. Fail indeks menyenaraikan fail gumpalan yang berkaitan dan data lain dengan pengecam. Untuk penyerahan, ia disimpan dalam bentuk pokok dan juga dikenal pasti oleh nilai cincangnya. Pokok sepadan dengan folder dalam direktori kerja, dan pokok atau objek gumpalan yang terkandung dalam pepohon sepadan dengan subdirektori dan fail yang sepadan. Setiap penyerahan menyimpan kod pengenalan pokok peringkat atasnya.
Jika diserahkan dengan HEAD yang terpisah, penyerahan terakhir akan dirujuk oleh reflog untuk HEAD. Tetapi ia menjadi tidak sah selepas beberapa ketika dan akhirnya dikitar semula, sama seperti git commit –amend atau git rebase.
Pembelajaran yang disyorkan: "Tutorial Git"
Atas ialah kandungan terperinci Penjelasan terperinci dengan gambar dan teks! Fahami cara Git berfungsi. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!