Git

Tutorial Git Rebase

Tutorial Git Rebase

Pemula Git diperingatkan terhadap perintah rebase. Dan memang seharusnya begitu. Dengan semua hal baru untuk dipelajari, pemula mungkin lebih baik menguasai konsep dasar sebelum mempelajari seluk-beluk rebasing. Namun, jika Anda memahami dasar-dasar penggabungan cabang, maka mengetahui cara rebase dapat membantu Anda memecahkan beberapa teka-teki pengembangan yang rumit ketika waktu yang tepat tiba.

Git Rebase: Definisi

Menurut dokumentasi git, perintah rebase akan mengajukan kembali komit di atas tip dasar lainnya. Definisi ini mungkin sedikit menakutkan. Lebih mudah untuk menjelaskan rebase sebagai prosedur yang menambahkan perubahan cabang saat ini ke ekor cabang lain. Mari kita telusuri contoh untuk mendapatkan ide yang lebih baik tentang apa yang terjadi.

Contoh Git Rebasing

Dalam contoh ini, pertama-tama kita akan membuat kasus uji dengan cabang 'master' dan 'fitur'. Kemudian kita akan melakukan penggabungan standar. Selanjutnya, kita akan membuat ulang test case dan melakukan rebase dan merge.

1. Membuat Cabang Master dan Fitur

Berikut adalah skenario yang akan kita buat:

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

Dalam contoh di atas, kami mengambil jalur berikut:

  1. Komit A: kami menambahkan a.file .txt di cabang 'master'
  1. Komit B: kami menambahkan b.file .txt di cabang 'master'
  1. Pada tahap ini, kami membuat 'fitur' cabang yang berarti akan memiliki.txt dan b.txt
  1. Komit C: kami menambahkan c.file .txt di cabang 'master'
  1. Kami pergi ke cabang 'fitur'
  1. Komit E: kami memodifikasi a.txt di cabang 'fitur'
  1. Komit F: kami memodifikasi b.txt di cabang 'fitur'

Anda dapat membuat folder dan menjalankan kode berikut di dalam folder untuk membuat situasi di atas:

git init touch a.txt git add -A git commit -m "Komit A: ditambahkan a.txt" sentuh b.txt git add -A git commit -m "Komit B: ditambahkan b.txt" fitur cabang git sentuh c.txt git add -A git commit -m "Komit C: ditambahkan c.txt" git status git fitur checkout echo aaa > a.txt git add -A git commit -m "Komit E: dimodifikasi a.txt" echo bbb > b.txt git add -A git commit -m "Komit F: dimodifikasi b.txt" 

2. Penggabungan Sederhana

Mari gunakan perintah log untuk memeriksa kedua cabang.

Hasil untuk 'master':

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

Hasil untuk 'fitur':

$ git fitur checkout Beralih ke 'fitur' cabang $ git log --oneline 0286690 Komit F: dimodifikasi b.txt 7c5c85e Komit E: dimodifikasi a.txt b430ab5 Komit B: ditambahkan b.txt 6f30e95 Komit A: ditambahkan a.txt $ ls a.txt b.txt 

Perhatikan bagaimana cabang fitur tidak memiliki Komit C

Sekarang mari kita jalankan cabang gabungan 'fitur' dengan cabang 'master'. Anda akan diminta untuk memasukkan komentar. Di komentar, tambahkan "Komit G:" di awal untuk memudahkan pelacakan.

$ git checkout master Beralih ke fitur 'master' cabang $ git merge Penggabungan dilakukan dengan strategi 'rekursif'. Sebuah.txt | 1 + b.txt | 1 + 2 file diubah, 2 sisipan(+) 

Hasil untuk 'master':

 $ git checkout master Sudah di 'master' $ git log --oneline d086ff9 Komit G: Gabungkan 'fitur' cabang 0286690 Komit F: dimodifikasi b.txt 7c5c85e Komit E: dimodifikasi a.txt 2bbde47 Komit C: ditambahkan c.txt b430ab5 Komit B: ditambahkan b.txt 6f30e95 Komit A: ditambahkan a.txt $ ls a.txt b.txt c.txt 

Hasil untuk 'fitur':

$ git fitur checkout Beralih ke 'fitur' cabang $ git log --oneline 0286690 Komit F: dimodifikasi b.txt 7c5c85e Komit E: dimodifikasi a.txt b430ab5 Komit B: ditambahkan b.txt 6f30e95 Komit A: ditambahkan a.txt $ ls a.txt b.txt 

Di cabang 'master', Anda akan melihat ada komit baru G yang telah menggabungkan perubahan dari cabang 'fitur'. Pada dasarnya, tindakan berikut telah terjadi:

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

Di Commit G, semua perubahan dari cabang 'fitur' telah dibawa ke cabang master. Tetapi cabang 'fitur' itu sendiri tetap tidak tersentuh karena proses penggabungan. Perhatikan hash dari setiap komit. Setelah penggabungan, komit E (7c5c85e) dan F (0286690) memiliki hash yang sama pada cabang 'fitur' dan 'master'.


3. Menggabungkan dengan Rebasing

Mari ulangi langkah 1 untuk membuat cabang 'master' dan 'fitur' lagi.

Hasil untuk 'master':

$ git checkout master Beralih ke cabang 'master' $ git log --oneline 7f573d8 Komit C: ditambahkan c.txt 795da3c Komit B: ditambahkan b.txt 0f4ed5b Komit A: ditambahkan a.txt $ ls a.txt b.txt c.txt 

Hasil untuk 'fitur':

$ git fitur checkout Beralih ke 'fitur' cabang $ git log --oneline 8ed0c4e Komit F: dimodifikasi b.txt 6e12b57 Komit E: dimodifikasi a.txt 795da3c Komit B: ditambahkan b.txt 0f4ed5b Komit A: ditambahkan a.txt $ ls a.txt b.txt 

Mari kita rebase dari cabang 'fitur'.

$ git fitur checkout Beralih ke 'fitur' cabang $ git rebase master Pertama, memutar kepala untuk memutar ulang pekerjaan Anda di atasnya… Menerapkan: Komit E: memodifikasi a.txt Menerapkan: Komit F: dimodifikasi b.txt 

Kemudian gabungkan 'fitur' menjadi 'master'.

$ git checkout master Beralih ke cabang 'master' $ git merge fitur Memperbarui 7f573d8… 9efa1a3 Maju cepat a.txt | 1 + b.txt | 1 + 2 file diubah, 2 sisipan(+) 

Hasil untuk cabang 'master':

$ git checkout master Sudah di 'master' $ git log --oneline 9efa1a3 Komit F: dimodifikasi b.txt 8710174 Komit E: dimodifikasi a.txt 7f573d8 Komit C: ditambahkan c.txt 795da3c Komit B: ditambahkan b.txt 0f4ed5b Komit A: ditambahkan a.txt $ ls a.txt b.txt c.txt 

Hasil untuk cabang 'fitur':

$ git fitur checkout Beralih ke 'fitur' cabang $ git log --oneline 9efa1a3 Komit F: dimodifikasi b.txt 8710174 Komit E: dimodifikasi a.txt 7f573d8 Komit C: ditambahkan c.txt 795da3c Komit B: ditambahkan b.txt 0f4ed5b Komit A: ditambahkan a.txt $ ls a.txt b.txt c.txt 

Perhatikan bahwa setelah rebase dan gabungkan kedua cabang adalah sama. Juga, hash untuk E dan F telah berubah di kedua cabang. Pada dasarnya, dalam skenario rebase, inilah yang terjadi:

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

Itu sebabnya tidak ada komit baru. Komit E dan F telah dihitung ulang dan dilekatkan ke ujung cabang 'master'.

Rebasing adalah alat yang berguna ketika Anda ingin membersihkan riwayat pekerjaan Anda. Namun, ada bahaya yang telah melahirkan aturan emas.


Aturan Emas Rebasing

Aturan emas rebasing adalah:

Jangan pernah rebase cabang publik.

Seperti yang Anda lihat dari contoh di atas, rebasing menghitung ulang komit. Ketika banyak orang bercabang dari repositori publik, rebasing dapat menciptakan situasi di mana pengembang yang telah membuat cabang baru akan mengalami situasi penggabungan yang sangat rumit. Jadi, sebaiknya jangan pernah melakukan rebase cabang publik yang dibagikan.

Kesimpulannya:

Rebasing adalah fitur unik dari Git. Tapi gunakan dengan hati-hati.

Informasi Lebih Lanjut:

Berikut adalah beberapa tautan untuk studi lebih lanjut:

Dokumentasi Git Rebase
Penggabungan Atlassian vs Rebasing

Referensi:

Cara mengubah penunjuk Mouse dan ukuran kursor, warna & skema pada Windows 10
Penunjuk mouse dan kursor di Windows 10 adalah aspek yang sangat penting dari sistem operasi. Ini dapat dikatakan untuk sistem operasi lain juga, jadi...
Mesin Game Gratis dan Sumber Terbuka untuk Mengembangkan Game Linux
Artikel ini akan membahas daftar mesin game sumber terbuka dan gratis yang dapat digunakan untuk mengembangkan game 2D dan 3D di Linux. Ada banyak mes...
Shadow of the Tomb Raider untuk Tutorial Linux
Shadow of the Tomb Raider adalah tambahan kedua belas untuk seri Tomb Raider - waralaba game aksi-petualangan yang dibuat oleh Eidos Montreal. Permain...