5 perintah Git lanjutan untuk meningkatkan game Git Anda

Jika Anda seorang pengembang saat ini, kemungkinan besar Anda telah mempelajari Git, sistem kontrol versi di jantung alur kerja perangkat lunak modern. Anda mengetahui dasar-dasarnya - cara kerja repositori, cara membuat cabang dan melakukan perubahan, serta cara menggabungkan perubahan tersebut dan permintaan penarikan.

Tetapi sekarang setelah Anda mengetahui dasar-dasarnya, saatnya untuk sedikit naik level - untuk memanfaatkan beberapa fitur Git yang lebih hebat dalam alur kerja Anda. Berikut adalah lima fitur Git tingkat lanjut untuk dijadikan bagian dari upaya pengembangan Anda saat ini dan di masa mendatang.

Sederhanakan riwayat komit dengan git rebase

Ketika Anda memiliki dua cabang dalam sebuah proyek (misalnya cabang pengembangan dan cabang master), keduanya memiliki perubahan yang perlu digabungkan, git mergeperintahnya adalah cara alami dan langsung untuk menyatukannya. A mergemenambahkan riwayat pengembangan satu cabang sebagai komit gabungan ke cabang lainnya. Meskipun hal ini mempertahankan kedua riwayat secara lengkap, hal ini dapat membuat keseluruhan riwayat proyek sulit untuk diikuti. Dalam beberapa kasus, Anda mungkin menginginkan hasil yang lebih sederhana dan lebih bersih. 

The git rebaseperintah juga menggabungkan dua cabang, tapi apakah itu sedikit sebuah berbeda. A git rebasemenulis ulang sejarah komit dari satu cabang sehingga cabang lainnya dimasukkan ke dalamnya dari titik di mana cabang itu dibuat. Hal ini membuat sejarah komit yang kurang berisik, dan lebih linier, untuk cabang itu. Tetapi itu juga berarti bahwa detail yang berpotensi berguna tentang cabang lain dan proses penggabungan akan dihapus. 

Untuk itu, rebasepaling baik digunakan saat Anda memiliki beberapa cabang privat yang ingin Anda gabungkan menjadi satu, riwayat komit bersih sebelum menggabungkannya dengan cabang publik. Dengan cara ini, Anda mendapatkan manfaat penuh  rebase- membuat riwayat komit lebih linier dan tidak berisik - tanpa mengaburkan detail penting tentang riwayat komit pada proyek Anda.

Bersihkan penggabungan dengan git merge --squash

Cara lain untuk membuat penggabungan, dan commit berikutnya, tidak terlalu berisik adalah dengan menggunakan --squashopsi di git merge. --squashmengambil semua komit dari cabang masuk dan meratakannya menjadi satu komit terkonsolidasi.

Keindahan dari penggabungan yang terjepit adalah Anda dapat memilih cara menerapkan file bertahap yang dihasilkan. Anda bisa memasukkan seluruh rangkaian perubahan sebagai satu, atau Anda bisa mengkomit beberapa file pada waktu di mana perubahan terkait erat. Penggabungan yang terjepit juga berguna jika riwayat komit dari cabang yang masuk hanya berguna dalam konteks cabang itu, atau jika itu dari cabang privat yang akan dibuang juga.

Seperti pada a rebase, teknik ini bekerja paling baik untuk memasukkan cabang internal ke master, tetapi juga cocok untuk permintaan tarik jika diperlukan.

Percepat pencarian bug dengan git bisect

Regresi halus dalam kode adalah yang paling sulit untuk disingkirkan. Bayangkan Anda baru saja menambahkan tes ke basis kode Anda untuk mengejar bug, tetapi Anda tidak yakin kapan bug pertama kali muncul ... dan Anda memiliki ratusan atau bahkan ribuan komit di repositori Anda. The  git bisect perintah memungkinkan Anda sangat mengurangi jumlah kode Anda harus mencari untuk menemukan komit yang menciptakan bug.

Ketika Anda mengaktifkan bisect( git bisect start) Anda menentukan dua titik dalam basis kode Anda untuk mengikat pencarian Anda: satu di mana Anda tahu ada sesuatu yang buruk ( HEAD, biasanya), dan satu di mana Anda tahu semuanya masih baik. bisectakan memeriksa komit di tengah-tengah antara komit buruk dan komit bagus, dan membiarkan Anda menjalankan pengujian. Proses subdivisi biner ini berulang sampai muncul komit yang merusak sesuatu.

git bisectadalah anugrah untuk basis kode besar dengan riwayat komit yang panjang dan kompleks, sehingga Anda tidak perlu repot untuk memeriksa setiap komit terakhir dengan harapan Anda akan menemukan bug Anda cepat atau lambat. Pada sangat sedikit, menebang oleh setengah jumlah pencarian dan pengujian yang perlu Anda lakukan.

Ajukan ulang komitmen dengan git cherry-pick

Banyak gitperintah lanjutan hanya berguna dalam keadaan yang sangat spesifik, dan diabaikan dengan aman bahkan oleh pengguna yang cukup mahir. Tetapi ketika Anda menemukan salah satu dari keadaan khusus itu, ada gunanya mengenal mereka.

Pertimbangkan git cherry-pick. Ini memungkinkan Anda mengambil komit yang diberikan - komit apa pun, dari cabang mana pun - dan menerapkannya ke cabang berbeda, tanpa harus menerapkan perubahan apa pun dari riwayat komit itu. Ini berguna dalam beberapa keadaan utama:

  • Anda membuat komit ke cabang yang salah, dan Anda ingin menerapkannya dengan cepat ke cabang yang benar.
  • Anda ingin menerapkan perbaikan dari cabang ke batang sebelum melanjutkan pekerjaan lain pada kode batang.

Perhatikan bahwa Anda memiliki beberapa opsi selain langsung menerapkan komit saat Anda cherry-pickmelakukannya. Jika Anda melewatkan --no-commitopsi, misalnya, komit yang dipilih ceri ditempatkan di area pementasan cabang saat ini. 

Atur proyek secara elegan dengan submodul Git

Seperti kebanyakan bahasa pemrograman yang menyediakan cara untuk mengimpor paket atau modul, Git menawarkan cara untuk secara otomatis memasukkan isi dari satu repositori ke dalam yang lain, sebuah submodule . Anda dapat membuat subdirektori di dalam repo, dan secara otomatis mengisinya dengan konten repo lain, biasanya dengan merujuk ke hash komit tertentu demi konsistensi.

Perhatikan bahwa submodul Git bekerja paling baik dalam kondisi berikut:

  • Submodul yang dimaksud tidak sering berubah, atau dikunci ke komit tertentu. Pekerjaan apa pun pada submodul, bukan dengan submodul, harus dikelola secara terpisah.
  • Semua orang menggunakan versi Git yang mendukung submodul dan memahami langkah-langkah yang diperlukan untuk bekerja dengannya. Misalnya, direktori submodul tidak selalu terisi secara otomatis dengan konten dari repositori submodul. Anda mungkin perlu menggunakan git submodule updateperintah di repo untuk memperbarui semuanya.