Git adalah sistem kawalan versi diedarkan - alat untuk mengesan perubahan yang dibuat pada satu set fail atau menyelaraskan kerja dari masa ke masa. Ia sering digunakan oleh pengaturcara untuk menyelaraskan perubahan kepada kod sumber perisian dan bahagian yang terbaik; ia boleh digunakan untuk mengesan sebarang jenis kandungan sama sekali. Ia direka khas untuk mengendalikan segala-galanya dari projek-projek kelantangan kecil hingga besar dengan penuh melancarkan dan kecekapan. Ia sangat fleksibel yang bermaksud individu boleh berkongsi kerja secara langsung di antara repositori peribadi dan kumpulan mereka boleh menyelaraskan aliran kerja mereka melalui repositori pusat. Ia hanya membenarkan dua pemaju duduk di dua lokasi berbeza untuk membuat dan merekodkan perubahan secara bebas, semuanya tanpa repositori pusat.
Penggabungan adalah amalan biasa dalam Git yang digunakan untuk mengintegrasikan perubahan dari satu cabang ke yang lain. Git merge adalah perintah yang melakukan perubahan ke lokasi lain. Ia membolehkan pemaju untuk mengambil garisan kod bebas mereka yang dicipta oleh cawangan Git dan menyatukan mereka ke dalam cawangan tunggal. Ini hanya mengubah cawangan sasaran sementara sejarah cawangan sumber kekal. Rebatan Git adalah satu lagi perintah yang digunakan pada dasarnya untuk tujuan yang sama kecuali ia berbeza. Mereka berdua melakukan perkara yang sama - memasukkan komitmen dari satu cabang ke yang lain - tetapi perbezaannya terletak pada bagaimana mereka melakukannya. Kami mengetengahkan beberapa mata pembezaan utama yang membandingkan kedua-dua.
Git merge adalah perintah yang menyatukan dua atau lebih cabang cawangan sejarah. Gabungan sering menyatukan hanya dua cabang, walaupun Git menyokong penggabungan tiga, empat, atau lebih cabang pada masa yang sama. Gabungan Git digunakan oleh tarik Git untuk memasukkan perubahan dari satu cabang ke yang lain atau dari repositori lain sama sekali. Penggabungan mesti berlaku dalam repositori tunggal yang bermaksud semua cawangan yang perlu disatukan, harus ada dalam repositori yang sama. Merge situasi biasanya disebabkan oleh dua atau lebih pengguna, cuba untuk mengemas kini kod biasa. Paling umum, pengguna menggabungkan cawangan ke cawangan lain dalam repositori tempatan mereka dalam persekitaran tempatan. Gabungan Git secara khusus menyatukan kandungan cawangan sumber dengan cawangan sasaran. Cawangan sasaran ditukar, sementara cawangan sumber kekal.
Rebatan Git adalah satu lagi alternatif untuk penggabungan yang digunakan untuk mengintegrasikan cawangan lain dengan cawangan di mana anda sedang bekerja, kecuali ia menyimpan sejarah komitmen linear. Tujuan rebat Git adalah untuk memindahkan cawangan dari satu lokasi ke lokasi lain. Seperti yang dilakukan tidak berubah, mereka tidak boleh dipindahkan, jadi ini memerlukan membuat komitmen baru dengan perubahan dan metadata yang sama. Rebat pada dasarnya mengubah tanggapan tentang kapan dan di mana urutan komitmen telah dibangunkan, yang mengakibatkan beberapa aspek sejarah pembangunan hilang. Ini bermakna komitmen asal yang mana pembangunan pada asalnya akan diubah. Ia berkesan menggabungkan semua komitmen baru dalam cawangan induk dengan menulis semula sejarah. Akibatnya, ia mewujudkan komitmen baru untuk setiap komitmen di cawangan asal.
- Walaupun, gabungan dan rebase adalah cara yang paling umum untuk mengintegrasikan perubahan dalam Git dan mereka melayani tujuan yang sama - untuk menggabungkan beberapa cabang ke dalam satu - perbezaan terletak pada bagaimana mereka mencapainya. Gabungan gabungan menyatukan kandungan cawangan sumber dengan cawangan sasaran, sambil mengekalkan keturunan setiap riwayat komit, sedangkan Git rebase menggabungkan semua komitmen baru dalam cawangan induk dengan menulis semula sejarah dengan membuat komitmen baru untuk setiap komit dalam cawangan sumber.
- Dengan Gabungan Git, anda mula-mula bertukar ke cawangan untuk digabungkan dan kemudian gunakan perintah penggabungan untuk memilih cawangan untuk bergabung. Memandangkan cawangan menunjuk pada komit dan komit adalah butiran yang anda perihalkan dengan perubahan, penggabungan arahan menggabungkan di peringkat cawangan atau komitmen. Rebat, sebaliknya, agak berbeza. Mula-mula anda memilih cawangan untuk rebase dan kemudian gunakan perintah rebase untuk memilih di mana untuk meletakkannya.
- Penggabungan mewujudkan komitmen baru yang mewakili penggabungan antara dua cabang. Ia mengintegrasikan perubahan dari garis pembangunan yang berbeza (cawangan) bersama-sama dengan membuat komit gabungan. Tujuannya adalah untuk menyertai dua atau lebih cawangan bersama-sama, termasuk semua perubahan sejak titik perpecahan ke dalam cawangan semasa. Fast-forward adalah tingkah laku gabungan gabungan di Git. Sebaliknya, kebangkitan, mengubah individu dilakukan dengan menulis semula sejarah projek dengan membuat komitmen baru untuk setiap komit dalam cawangan asal, yang seterusnya menghasilkan sejarah linier tanpa cawangan divergen.
- Gabungan Git tidak mengubah sejarah, sambil mengekalkan konteks cawangan yang bermaksud cawangan sedia ada tidak berubah dengan cara apapun. Ia mewujudkan komit baru (kecuali ia merupakan gabungan pantas), tetapi komitmen masih boleh dicapai dari cawangan. Sebaliknya, penumpukan Git, memperkatakan sejarah yang rumit. Komitmen ditulis semula, versi lama dilupakan, dan DAG revisi diubah. Komitmen tidak lagi dapat dicapai dengan menegaskan makna yang anda tidak lagi mampu menegur cawangan yang diterbitkan.
Singkatnya, kedua-dua gabungan dan rebase adalah dua cara untuk mengintegrasikan perubahan dalam Git, tetapi mereka berbeza dengan cara mereka melakukannya. Merge adalah operasi satu langkah dengan satu tempat untuk menyelesaikan konflik dan komitmen yang dapat dicapai dari cawangan tetap dapat dicapai. Rebat, sebaliknya, membuat semula masing-masing melakukan secara individu dengan menulis semula sejarah dengan membuat komitmen baru untuk setiap komit dalam cawangan sumber. Jadi, apa yang pernah dicapai adalah tidak dapat dicapai lagi. Rebat pada asasnya mengubah tanggapan tentang kapan dan di mana urutan komitmen telah dibangunkan.