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:
- Komit A: kami menambahkan a.file .txt di cabang 'master'
- Komit B: kami menambahkan b.file .txt di cabang 'master'
- Pada tahap ini, kami membuat 'fitur' cabang yang berarti akan memiliki.txt dan b.txt
- Komit C: kami menambahkan c.file .txt di cabang 'master'
- Kami pergi ke cabang 'fitur'
- Komit E: kami memodifikasi a.txt di cabang 'fitur'
- 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:
- https://www.atlassian.com/git/tutorials/merging-vs-rebasing
- Kontrol Versi dengan Git - 07 - Rebase [https://www.Youtube.com/watch?v=cSf8cO0WB4o]
- https://git-scm.com/docs/git-rebase
- Apa itu Git rebase? [https://www.Youtube.com/watch?v=TymF3DpidJ8]
- https://medium.freecodecamp.org/git-rebase-and-the-golden-rule-explained-70715eccc372