Git

Tutorial Git Rebase

Tutorial Git Rebase

Pemula Git diberi amaran terhadap perintah rebase. Dan semestinya begitu. Dengan semua perkara baru yang perlu dipelajari, pemula mungkin lebih baik menguasai konsep asas sebelum mempelajari selok-belok penyusutan semula. Walau bagaimanapun, jika anda memahami asas penggabungan cawangan, mengetahui cara membuat semula dapat membantu anda menyelesaikan beberapa teka-teki pembangunan yang rumit apabila tiba masanya.

Git Rebase: Definisi

Menurut dokumentasi git, perintah rebase akan digunakan semula di atas hujung asas yang lain. Definisi ini mungkin agak menakutkan. Lebih mudah untuk menjelaskan rebase sebagai prosedur yang menambah perubahan cabang semasa ke ekor cawangan lain. Mari teliti contoh untuk mendapatkan idea yang lebih baik mengenai apa yang berlaku.

Contoh Git Rebasing

Dalam contoh ini, kita akan membuat kes ujian dengan cabang 'master' dan 'feature' terlebih dahulu. Maka kita akan melakukan penggabungan standard. Seterusnya, kami akan membuat semula kes ujian dan melakukan rebase dan penggabungan.

1. Membuat Cawangan Induk dan Ciri

Inilah senario yang akan kami buat:

A - B - C (master) \ E - F (ciri) 

Dalam contoh di atas, kami mengambil jalan berikut:

  1. Komitmen A: kita menambah a.fail txt di cawangan 'master'
  1. Komitmen B: kita menambah b.fail txt di cawangan 'master'
  1. Pada peringkat ini, kita membuat cabang 'ciri' yang bermaksud ia akan memiliki.txt dan b.txt
  1. Komit C: kita tambah c.fail txt di cawangan 'master'
  1. Kami pergi ke cawangan 'ciri'
  1. Komit E: kami mengubahsuai a.txt di cawangan 'ciri'
  1. Komit F: kita mengubah suai b.txt di cawangan 'ciri'

Anda boleh membuat folder dan menjalankan kod berikut di dalam folder untuk membuat situasi di atas:

git init sentuhan a.txt git add -A git commit -m "Komit A: tambah a.txt "sentuhan b.txt git add -A git commit -m "Komit B: tambah b.txt "ciri cawangan cawangan sentuhan c.txt git add -A git commit -m "Komit C: tambah c.txt "git status git checkout feature echo aaa> a.txt git add -A git commit -m "Komit E: diubahsuai a.txt "gema bbb> b.txt git add -A git komit -m "Komit F: diubah suai b.txt " 

2. Gabungan Ringkas

Mari gunakan perintah log untuk memeriksa kedua-dua cawangan.

Hasil untuk 'master':

$ git master checkout Beralih ke cawangan 'master' $ git log --oneline 2bbde47 Komitmen C: tambah c.txt b430ab5 Komitmen B: tambah b.txt 6f30e95 Komit A: tambah a.txt $ ls a.txt b.txt c.txt 

Hasil untuk 'ciri':

Ciri $ git checkout Beralih ke cabang 'feature' $ git log --online 0286690 Komit F: diubah suai b.txt 7c5c85e Komit E: diubahsuai a.txt b430ab5 Komitmen B: tambah b.txt 6f30e95 Komit A: tambah a.txt $ ls a.txt b.txt 

Perhatikan bagaimana cabang ciri tidak mempunyai Komit C

Sekarang mari kita jalankan gabungan 'ciri' cawangan dengan 'master' cawangan. Anda akan diminta memasukkan komen. Dalam komen tersebut, tambahkan "Komit G:" di awal untuk memudahkan pelacakan.

$ git master checkout Beralih ke cawangan 'master' $ git merge feature Gabungan dibuat oleh strategi 'recursive'. a.txt | 1 + b.txt | 1 + 2 fail diubah, 2 sisipan (+) 

Hasil untuk 'master':

 Master $ git checkout Sudah ada di 'master' $ git log --oneline d086ff9 Commit G: Merge branch 'feature' 0286690 Commit F: modified b.txt 7c5c85e Komit E: diubah suai a.txt 2bbde47 Komitmen C: tambah c.txt b430ab5 Komitmen B: tambah b.txt 6f30e95 Komit A: tambah a.txt $ ls a.txt b.txt c.txt 

Hasil untuk 'ciri':

Ciri $ git checkout Beralih ke cawangan 'ciri' $ git log - talian 0286690 Komit F: diubah suai b.txt 7c5c85e Komit E: diubah suai a.txt b430ab5 Komitmen B: tambah b.txt 6f30e95 Komit A: tambah a.txt $ ls a.txt b.txt 

Di cabang 'master', anda akan melihat ada komit G baru yang menggabungkan perubahan dari cabang 'feature'. Pada dasarnya, tindakan berikut telah berlaku:

A - B - C - G (master) \ / E - F (ciri) 

Di Commit G, semua perubahan dari cabang 'feature' telah dibawa ke cabang induk. Tetapi cabang 'ciri' itu sendiri masih belum tersentuh kerana proses penggabungan. Perhatikan hash setiap komit. Selepas penggabungan, E (7c5c85e) dan F (0286690) komit mempunyai hash yang sama pada cabang 'feature' dan 'master'.


3. Menggabungkan dengan Melancarkan Semula

Mari ulangi langkah 1 untuk membuat cawangan 'master' dan 'feature' sekali lagi.

Hasil untuk 'master':

$ git master checkout Beralih ke cawangan 'master' $ git log --online 7f573d8 Komit C: tambah c.txt 795da3c Komitmen B: tambah b.txt 0f4ed5b Komit A: tambah a.txt $ ls a.txt b.txt c.txt 

Hasil untuk 'ciri':

Ciri $ git checkout Beralih ke cabang 'feature' $ git log --oneline 8ed0c4e Commit F: diubah suai b.txt 6e12b57 Komit E: diubahsuai a.txt 795da3c Komitmen B: tambah b.txt 0f4ed5b Komit A: tambah a.txt $ ls a.txt b.txt 

Mari rebase dari cawangan 'ciri'.

Ciri $ git checkout Beralih ke cabang 'feature' $ git rebase master Pertama, putar kepala untuk memutar semula karya anda di atasnya ... Memohon: Komit E: mengubah.txt Mengaplikasi: Komit F: diubah suai b.txt 

Kemudian gabungkan 'ciri' menjadi 'master'.

$ git master checkout Beralih ke cawangan 'master' $ git merge feature Mengemas kini 7f573d8… 9efa1a3 Cepat-maju a.txt | 1 + b.txt | 1 + 2 fail diubah, 2 sisipan (+) 

Hasil untuk cabang 'master':

Master $ git checkout Sudah ada di 'master' $ git log --online 9efa1a3 Commit F: diubah suai b.txt 8710174 Komit E: diubahsuai a.txt 7f573d8 Komit C: tambah c.txt 795da3c Komitmen B: tambah b.txt 0f4ed5b Komit A: tambah a.txt $ ls a.txt b.txt c.txt 

Hasil untuk cabang 'ciri':

Ciri $ git checkout Beralih ke cabang 'feature' $ git log --online 9efa1a3 Commit F: diubah suai b.txt 8710174 Komit E: diubahsuai a.txt 7f573d8 Komit C: tambah c.txt 795da3c Komitmen B: tambah b.txt 0f4ed5b Komit A: tambah a.txt $ ls a.txt b.txt c.txt 

Perhatikan bahawa selepas rebase dan menggabungkan kedua-dua cawangan adalah sama. Juga, hash untuk E dan F telah berubah di kedua-dua cawangan. Pada dasarnya, dalam senario rebase, inilah yang berlaku:

A - B - C \ E '- F' (ciri, master) 

Itulah sebabnya tidak ada komitmen baru. Komitmen E dan F telah dikira semula dan diikat ke hujung cawangan 'master'.

Melancarkan semula adalah alat yang berguna apabila anda ingin membersihkan sejarah kerja anda. Namun, ada bahaya yang telah melahirkan peraturan emas.


Peraturan Emas Melancarkan Semula

Aturan keemasan untuk melancarkan semula adalah:

Jangan sesekali melancarkan cawangan awam.

Seperti yang dapat anda lihat dari contoh di atas, penurunan semula mengira semula komit. Apabila banyak orang bercabang dari repositori awam, penyusunan semula dapat membuat situasi di mana pembangun yang telah membuat cawangan baru akan menghadapi situasi penggabungan yang sangat rumit. Oleh itu, ada baiknya jangan sesekali membebaskan cawangan awam yang dikongsi.

Kesimpulannya:

Melancarkan semula adalah ciri unik Git. Tetapi gunakannya dengan berhati-hati.

Maklumat lanjut:

Berikut adalah beberapa pautan untuk kajian selanjutnya:

Dokumentasi Git Rebase
Penggabungan Atlassian vs Rebasing

Rujukan:

Distro Linux Terbaik untuk Permainan pada tahun 2021
Sistem operasi Linux telah jauh dari tampilan asal, ringkas dan berasaskan pelayan. OS ini telah berkembang pesat dalam beberapa tahun kebelakangan in...
Cara menangkap dan streaming sesi permainan anda di Linux
Pada masa lalu, bermain permainan hanya dianggap sebagai hobi, tetapi seiring dengan berjalannya waktu, industri permainan menyaksikan pertumbuhan yan...
Permainan Terbaik untuk Dimainkan dengan Penjejakan Tangan
Oculus Quest baru-baru ini memperkenalkan idea hebat penjejakan tangan tanpa pengawal. Dengan jumlah permainan dan aktiviti yang semakin meningkat yan...