Apakah yang dilakukan git-rebase dan git-merge? Apa bezanya?
Jul 15, 2022 am 10:36 AMApakah yang dilakukan git-rebase dan git-merge? Apakah perbezaan antara git-rebase dan git-merge? Artikel berikut akan memperkenalkan kepada anda perbezaan antara git-rebase dan git-merge Saya harap ia akan membantu anda!
Menggunakan Git untuk kawalan versi sepatutnya menjadi salah satu aliran kerja yang kebanyakan jurutera hadapi setiap hari, tetapi apa yang saya gunakan tidak lebih daripada push
, pull
, merge
, checkout
atau log
dan arahan lain. ?" ”
Selepas mendengar ini, saya langsung keliru. Bagi saya, rebase ialah alat yang digunakan untuk mengatur komitmen. Bagaimanakah ia boleh dibandingkan dengan gabungan? [Pembelajaran yang disyorkan: "Tutorial Git"]
git-rebase
Mula-mula, mari kita bincangkan tentang apa yang biasanya saya gunakan perintah rebase. , jika saya menambah ujian unit baharu, dan kemudian commit
, maka log
akan mempunyai rekod tambahan commit
:
Tetapi ia tidak akan menjadi sehingga komit selesai saya mendapati saya terlepas menulis kes ujian lain, jadi selepas menebusnya, saya komited sekali lagi:
Pada masa ini, akan ada satu lagi dalam rekod commit
, tetapi pada saya, kedua-dua commit
ini sebenarnya melakukan perkara yang sama, jadi sebelum saya menolak ke jauh, saya ingin menyusun komit dan menggabungkan kedua-dua rekod.
Terdapat dua cara untuk menggabungkan kedua-dua rekod ini Yang pertama ialah reset
sebelum menambah kes ujian pertama, dan kemudian melakukannya terus commit
. Kaedah kedua ialah menggunakan rebase
untuk mengendalikannya!
Mula-mula mari kita lihat log semasa:
Tujuan saya adalah untuk menyusun 9dc67ff
dan 87af945
menjadi satu, jadi saya perlu untuk melaraskan Komit adalah daripada init, iaitu, semua komit selepas id komit ialah 7eb57cb
Apabila dipasangkan dengan perintah rebase
, ia adalah:
git?rebase?-i?7eb57cb
Selepas memasukkan, ia akan melompat ke. skrin penyuntingan vim:
Anda akan melihat semua komit selepas 7eb57cb
pada skrin (pada masa ini hanya 9dc67ff
dan 87af945
), kemudian tukar 9dc67ff
daripada pick
kepada squash
bermaksud menggabungkannya dengan komitmen sebelumnya. Klik i dahulu dan kemudian mula mengedit kandungan dengan vim:
Selepas mengedit, anda boleh klik esc dan masukkan :wq
untuk menyimpan Jika anda hanya ingin tahu, masuk dan lihat untuk menyimpan, masukkan :q!
. Selepas menyelesaikan proses di atas, semak log sekali lagi dan anda akan mendapati bahawa dua komit telah menjadi satu. Selepas menyimpan, ia akan melompat ke skrin mesej komit Di sini anda boleh memasukkan mesej komit yang digabungkan, tetapi saya tidak akan mengubahnya dan hanya menyimpannya terus:
Tamat. di atas Selepas proses, semak log sekali lagi, dan anda akan mendapati bahawa kedua-dua komit telah menjadi satu:
Baik dahulu, operasi di atas ialah mod interaktif rebase, dalam git rebase -i yang dimasukkan kemudian sebenarnya adalah singkatan daripada interactive
.
git-merge
Semua orang sepatutnya sangat biasa dengan arahan gabungan, kerana apabila membuat ciri baharu, anda biasanya mengeluarkan cawangan dan kemudian menyelesaikannyamerge
Kembali ke cabang utama seperti master atau develop. Proses operasi adalah seperti berikut:
在 merge 的時(shí)候會有兩種情況,第一種是 ?fast-forward
,會把被合并分支的 HEAD 的 reference 移到要合併分支內(nèi)最新的 commit 上,上方操作的 merge 結(jié)果就是 fast-forward
,master 的 HEAD 被移到 string-library 的最新 commit,畫成圖的話就是這樣子:
但是如果在執(zhí)行 merge 的時(shí)候產(chǎn)生沖突,那分支的合并行為就會和 fast-forward 有點(diǎn)不同了。舉例來說,我分別在 master 和 string-library 的同一個(gè)文件添加內(nèi)容,那當(dāng)我執(zhí)行 merge 的時(shí)候就會要求先修復(fù)沖突:
修復(fù)完后,再執(zhí)行 commit 完成合并,而這一次合并時(shí),會再多一個(gè) commit 是有關(guān) merge 了 string-library 分支的紀(jì)錄:
這個(gè)情況畫成圖就會像這樣子:
git-rebase 與 git-merge 的差異
看完上方對 rebase
和 merge
的介紹后,你也許會想說:
「咦?那這兩個(gè)不是完全不同的東西嗎?」
對的,原本我也是這麼認(rèn)為,一直到我去看了 git-rebase 的文檔,才發(fā)現(xiàn)原來我一直誤會它了。在 git book 的 rebase 篇章,第一段就說明了,在 Git 里有兩種方法可以用來整合兩個(gè)分支,而這兩個(gè)在上方都有提到,分別為 merge
和 rebase
:
從上方的 merge 例子已經(jīng)知道了,merge 在合并的時(shí)候會有 fast-forward
,和沖突時(shí)用一個(gè) commit 記錄合并變更的兩種情形。而 rebase 的整合方式非常有趣,依照關(guān)于 rebase 的另一段說明,它可以「把某個(gè)分支中所有 commit 的過程,以另一個(gè)分支的 commit 為基礎(chǔ)重播一遍」:
這是什麼意思呢?首先讓我們回到上述的例子,并在 master 分支上用 reset
,讓 master 的版本回到合并 string-library 之前:
現(xiàn)在我們要用 rebase 指令,將 string-library 所有的 commit 修改,以 master 的 commit 為基礎(chǔ)跑一次。使用 rebase 合并的第一步,要先切到想重播 commit 的分支:
git?checkout?string-library
然后再輸入 git rebase
指令,并于后方指定要在哪個(gè)分支上重播:
git?rebase?master
執(zhí)行結(jié)果:
在 rebase 重播 commit 的過程中,和 merge 相似的地方在于,如果有沖突的話還是需要解決,但在解決后,并不是使用 commit 指令進(jìn)行合并,而是要輸入 git rebase --continue,讓 rebase 可以繼續(xù)重播接下來的 commit:
重播完成時(shí),會顯示目前重播到哪個(gè) commit,以 string-library
來說就是最新的add string unit test D
。這時(shí)候的分支關(guān)系,畫成圖就會變成:
上圖在經(jīng)過 rebase 之后,string-library
里 07e38fb 修改,會以 master 的 commit 為基底再重播一次。
需要注意的是,重播后的 commit id 會和原本的不一樣,這等于完全改寫了分支內(nèi)所有的 commit 歷史紀(jì)錄。
Selain itu, selepas melaksanakan rebase, string-library
sebenarnya belum digabungkan kembali ke cawangan induk, jadi anda masih perlu bertukar kembali ke cawangan induk untuk melaksanakan gabungan bagi melengkapkan gabungan:
Oleh kerana pangkalan semula telah digunakan untuk mengendalikan konflik komit semasa main semula, kini cantuman akan terus ke cantuman ke hadapan pantas dan tidak akan ada rekod komit lain untuk gabungan itu.
Kebaikan dan keburukan menggunakan git-rebase untuk bergabung
Kelebihan
Tiada komit berlebihan akan dihasilkan semasa penggabungan .
Konflik boleh dikendalikan dalam unit komit semasa main semula.
Apabila digabungkan, ia akan diatur mengikut komitmen cawangan, supaya isu semakan atau proses pemprosesan ciri dapat difahami dengan jelas. Jika anda menggunakan gabungan, komit kedua-dua cawangan akan disusun dalam susunan kronologi selepas gabungan.
Apabila menyumbang kepada projek sumber terbuka, jika anda meletakkan semula sebelum menolak, pengarang boleh terus bergabung dengan cara yang pantas tanpa perlu menyelesaikan konflik secara berasingan.
Kelemahan
Kelemahan terbesar ialah yang disebut di atas akan mengubah suai sejarah komitmen atau cawangan secara setempat anda secara tidak sengaja menukar cawangan terpencil, dan kemudian secara tidak sengaja menggunakan git push -f
, anda mungkin dibenci oleh rakan sekerja anda, atau anda mungkin diserahkan kepada jurutera utara semata-mata.
Perlukah saya menggunakan git-rebase atau git-merge?
Setelah menyemak beberapa maklumat, saya mendapati bahawa kedua-dua rebase dan merge mempunyai penyokong sendiri, saya akan menerangkan idea mereka dahulu dan kemudian secara subjektif menyebut pendapat saya sendiri.
puak git-merge
menyokong git-merge
jurutera percaya bahawa nilai rekod versi terletak pada komit projek, iaitu " "Apa yang sebenarnya berlaku dalam sejarah?" Ia akan menjadi sangat buruk jika anda mengubah suai rekod sejarah ini. Jadi walaupun kandungan cawangan yang berbeza dicampurkan bersama selepas penggabungan, mereka masih menggambarkan sejarah projek. Jurutera yang dihantar oleh
git-rebase menghantar
untuk menyokong git-rebase
merasakan bahawa komitmen itu bercakap tentang "proses evolusi" projek, dan apa yang berlaku adalah Yang penting, walaupun sejarah komit diubah suai, apa yang berlaku tetap tidak berubah Memandangkan rekod yang lebih jelas dan ringkas boleh digunakan untuk dibaca oleh generasi akan datang, ini harus dilakukan.
Pendapat subjektif peribadi
Saya secara peribadi masih menggunakan git-rebase untuk mengubah suai komitmen untuk menjadikan rekod sejarah lebih mudah dibaca, tetapi penggunaannya terhad untuk menolak ke jauh Sebelum ini , jika saya telah menolak rekod itu ke jauh hari ini, saya tidak akan mengubah suainya walau betapa kucar-kacirnya lagi, rekod jauh itu dikongsi oleh semua orang Jika saya tidak mengubah suainya sesuka hati, saya akan menghormati ahli lain pasukan.
[Tutorial video berkaitan yang disyorkan: bahagian hadapan web]
Atas ialah kandungan terperinci Apakah yang dilakukan git-rebase dan git-merge? Apa bezanya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undress AI Tool
Gambar buka pakaian secara percuma

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Untuk melihat sejarah komited git, gunakan arahan gitlog. 1. Penggunaan asas adalah gitlog, yang boleh memaparkan hash penyerahan, pengarang, tarikh dan maklumat penyerahan; 2. Gunakan Gitlog-Eleline untuk mendapatkan pandangan ringkas; 3. Penapis oleh pengarang atau maklumat penyerahan melalui -pengadil dan --grep; 4. Tambah -P untuk melihat perubahan kod, --Stat untuk melihat statistik perubahan; 5. Penggunaan --graph dan -semua untuk melihat sejarah cawangan, atau menggunakan alat visualisasi seperti gitkraken dan vscode.

Untuk memadam cawangan git, mula -mula pastikan ia telah digabungkan atau tiada pengekalan diperlukan. Gunakan Gitbranch-D untuk memadam cawangan digabungkan tempatan. Jika anda perlu memaksa memadam cawangan yang tidak diturunkan, gunakan parameter -D. Penghapusan Cawangan Jauh menggunakan perintah nama Gitpushorigin-Deletebranch, dan boleh menyegerakkan repositori tempatan orang lain melalui Gitfetch-Prune. 1. Untuk memadam cawangan tempatan, anda perlu mengesahkan sama ada ia telah digabungkan; 2. Untuk memadam cawangan jauh, anda perlu menggunakan parameter --elete; 3. Selepas penghapusan, anda harus mengesahkan sama ada cawangan itu berjaya dikeluarkan; 4. Berkomunikasi dengan pasukan untuk mengelakkan secara tidak sengaja memadamkan cawangan bersama; 5. Cawangan -cawangan yang tidak berguna secara berkala untuk memastikan gudang bersih.

Untuk menambah subtree ke repositori git, mula-mula tambahkan repositori jauh dan dapatkan sejarahnya, kemudian gabungkannya ke dalam subdirektori menggunakan arahan Gitmerge dan Gitread-tree. Langkah-langkah adalah seperti berikut: 1. Gunakan perintah Gitremoteadd-F untuk menambah repositori jauh; 2. Jalankan gitmerge-srecursive-no-commit untuk mendapatkan kandungan cawangan; 3. Gunakan Gitread-Tree-Prefix = untuk menentukan direktori untuk menggabungkan projek sebagai subtree; 4. Mengemukakan perubahan untuk melengkapkan penambahan; 5. Apabila mengemas kini, gitfetch terlebih dahulu dan ulangi penggabungan dan langkah -langkah untuk menyerahkan kemas kini. Kaedah ini mengekalkan sejarah projek luaran lengkap dan mudah dikekalkan.

Untuk mengenal pasti altcoin palsu, anda perlu bermula dari enam aspek. 1. Semak dan sahkan latar belakang bahan dan projek, termasuk kertas putih, laman web rasmi, alamat sumber terbuka kod dan ketelusan pasukan; 2. Perhatikan platform dalam talian dan berikan keutamaan kepada pertukaran arus perdana; 3. Berhati-hati dengan pulangan yang tinggi dan mod penarik orang untuk mengelakkan perangkap dana; 4. Menganalisis Kod Kontrak dan Mekanisme Token untuk memeriksa sama ada terdapat fungsi berniat jahat; 5. Semakan operasi komuniti dan media untuk mengenal pasti populariti palsu; 6. Ikuti cadangan anti-penipuan praktikal, seperti tidak mempercayai cadangan atau menggunakan dompet profesional. Langkah -langkah di atas secara berkesan dapat mengelakkan penipuan dan melindungi keselamatan aset.

Apakah perkara utama katalog? UseSelesscoin: Gambaran Keseluruhan dan Ciri -ciri Utama Ciri -ciri Utama Ciri -ciri Utama UselessCoin Uselesscoin (Tidak Berkonsentasi) Masa Depan: Apakah yang memberi kesan kepada harga UseStoScoin pada tahun 2025 dan seterusnya? Fungsi Teras Outlook Harga Masa Depan dan Pengimportan Uselesscoin (Tanpa Usah

Sebagai perintis di dunia digital, nama kod unik Bitcoin dan teknologi asas selalu menjadi tumpuan perhatian orang. Kod standardnya adalah BTC, juga dikenali sebagai XBT pada platform tertentu yang memenuhi piawaian antarabangsa. Dari sudut pandangan teknikal, Bitcoin bukanlah satu gaya kod tunggal, tetapi projek perisian sumber terbuka yang besar dan canggih. Kod terasnya terutamanya ditulis dalam C dan menggabungkan kriptografi, sistem yang diedarkan dan prinsip ekonomi, supaya sesiapa sahaja dapat melihat, mengkaji dan menyumbang kodnya.

Terdapat tiga cara utama untuk menetapkan pembolehubah persekitaran dalam PHP: 1. Konfigurasi global melalui php.ini; 2. Melalui pelayan web (seperti setenv Apache atau fastcgi_param of nginx); 3. Gunakan fungsi Putenv () dalam skrip PHP. Antaranya, php.ini sesuai untuk konfigurasi global dan jarang mengubah konfigurasi, konfigurasi pelayan web sesuai untuk senario yang perlu diasingkan, dan putenv () sesuai untuk pembolehubah sementara. Dasar kegigihan termasuk fail konfigurasi (seperti php.ini atau konfigurasi pelayan web), fail .Env dimuatkan dengan perpustakaan dotenv, dan suntikan dinamik pembolehubah dalam proses CI/CD. Maklumat sensitif pengurusan keselamatan harus dielakkan dengan keras, dan disyorkan untuk digunakan.

Artikel ini telah memilih beberapa laman web projek "selesai" Python dan portal sumber pembelajaran "blockbuster" peringkat tinggi untuk anda. Sama ada anda sedang mencari inspirasi pembangunan, mengamati dan belajar kod sumber peringkat induk, atau secara sistematik meningkatkan keupayaan praktikal anda, platform ini tidak boleh dilepaskan dan dapat membantu anda berkembang menjadi tuan python dengan cepat.
