๐ ๏ธ Git Branching Strategy & Workflow Guide
Panduan resmi tata kelola branching strategy dan prosedur rilis kode untuk tim pengembang (software development team). Panduan ini dirancang agar seluruh pengembang (termasuk junior developer) memiliki pemahaman yang sama terkait alur kerja Git, pengelolaan environment, serta mitigasi risiko saat rilis.
๐ Visual Workflow Diagramโ
Berikut adalah visualisasi diagram alur kerja branch dari feature, development, staging, hingga master beserta penanganan bugfix dan hotfix:
๐ Daftar Isiโ
- Prinsip Utama Workflow
- Arsitektur & Matriks Branch
- Panduan & Perlakuan di Setiap Branch
- Struktur Penamaan Branch & Commit Message
- Contoh Kasus End-to-End (Skenario Real-World)
- Aturan Emas (Golden Rules)
1. Prinsip Utama Workflowโ
Workflow ini mengadopsi pendekatan Simplified Git Flow yang disesuaikan dengan 3 environment utama: Development, Staging (QA), dan Production (Master).
Konsep Kunciโ
- Development sebagai Battletest Area: Tempat seluruh fitur baru dikumpulkan, diintegrasikan, dan diuji bersama (integration testing) oleh sesama developer.
- Staging sebagai Quality Gate: Tempat verifikasi akhir oleh tim QA. Kode wajib berhasil di-deploy dan lulus pengujian 100% di Staging sebelum diizinkan menyentuh Production.
- Master sebagai Production Reference: Menampung kode yang sedang aktif di-deploy dan diakses oleh pengguna akhir (end-user). Sangat stabil dan protected.
2. Arsitektur & Matriks Branchโ
| Nama Branch | Environment Target | Tipe Branch | Source Base (Dibuat Dari) | Target Merge | Akses Direct Push |
|---|---|---|---|---|---|
master | Production | Abadi (Protected) | - | - | DILARANG โ |
staging | Staging / QA | Abadi (Protected) | - | master | DILARANG โ |
development | Development | Abadi (Protected) | - | staging | DILARANG โ |
feature/* | Local / Dev | Temporer | development | development | BISA (Ke Branch Sendiri) |
bugfix/* | Local / Staging | Temporer | staging | staging & development | BISA (Ke Branch Sendiri) |
hotfix/* | Local / Prod | Temporer | master | master, staging, development | BISA (Ke Branch Sendiri) |
3. Panduan & Perlakuan di Setiap Branchโ
3.1. Branch Master (Production)โ
- Deskripsi: Branch utama yang merepresentasikan aplikasi di server Production (live).
- Karakteristik:
- Sangat Stabil: Tidak boleh ada kode yang eksperimental atau belum diuji.
- Protected Branch: Membutuhkan minimal 2 approval (Tech Lead & QA Lead) untuk Merge/Pull Request.
- Perlakuan:
- Dilarang keras melakukan
git pushlangsung. - Hanya menerima merge dari branch
staging(untuk rilis terjadwal) atauhotfix/*(untuk kondisi darurat). - Setiap kali terjadi merge ke
master, wajib dibuatkan Git Tag / Release Version (contoh:v1.0.0,v1.1.0).
- Dilarang keras melakukan
3.2. Branch Staging (QA / Pre-Production)โ
- Deskripsi: Branch pengujian akhir sebelum kode siap dilepas ke masyarakat/pengguna.
- Karakteristik:
- Environment Staging harus dikonfigurasi 99% identik dengan Production (spesifikasi server, pustaka, hingga struktur database).
- Perlakuan:
- Menerima merge dari branch
developmentsaat fitur-fitur yang dikumpulkan dinyatakan siap uji secara lengkap. - Syarat Mutlak: Pipa CI/CD harus sukses melakukan deployment tanpa error.
- Jika ditemukan bug pada fase ini, perbaikan dilakukan melalui branch
bugfix/*yang diturunkan daristaging. - Quality Gate: QA melakukan End-to-End Testing, Regression Testing, dan Security Audit.
- Menerima merge dari branch
3.3. Branch Development (Battletest & Integration)โ
- Deskripsi: Branch integrasi tempat pengumpulan seluruh hasil pekerjaan developer.
- Karakteristik:
- Tempat terjadinya Battletest: Pengujian integrasi antar-fitur yang dibuat oleh developer berbeda.
- Dinamis dan sering diperbarui.
- Perlakuan:
- Tempat gabungan dari berbagai branch
feature/*. - Apabila terjadi konflik antar-kode (merge conflict) atau kecacatan logika integrasi, pengembang menyelesaikan masalah di branch lokal masing-masing sebelum mengintegrasikan kembali.
- Automated Unit Test dan Integration Test wajib berjalan otomatis via CI/CD setiap ada MR yang masuk ke branch ini.
- Tempat gabungan dari berbagai branch
3.4. Branch Feature (feature/*)โ
- Deskripsi: Branch temporer untuk pembuatan fitur baru atau refactoring modul tertentu.
- Perlakuan:
- Dibuat (branched off) dari:
development. - Di-merge kembali ke:
developmentvia MR/PR setelah lulus code review. - Setelah MR disetujui dan di-merge, branch ini harus dihapus (delete branch) agar repository tetap bersih.
- Dibuat (branched off) dari:
3.5. Branch Bugfix (bugfix/*)โ
- Deskripsi: Branch temporer untuk menambal bug yang ditemukan oleh tim QA saat pengujian di environment Staging.
- Perlakuan:
- Dibuat (branched off) dari:
staging. - Di-merge ke:
staging(untuk pengujian ulang oleh QA) DANdevelopment(agar branch development tetap sinkron dan perbaikan tidak hilang). - Dihapus setelah perbaikan selesai dan di-merge.
- Dibuat (branched off) dari:
3.6. Branch Hotfix (hotfix/*)โ
- Deskripsi: Branch darurat (urgent) untuk menangani critical bug atau system crash di server Production.
- Perlakuan:
- Dibuat (branched off) dari:
master. - Di-merge ke 3 branch utama sekaligus:
master(di-deploy langsung ke Production).staging(agar Staging selalu membawa perbaikan terbaru).development(agar Development tidak overwrite fix ini saat rilis mendatang).
- Wajib menaikkan versi patch tag (misal:
v1.0.0โv1.0.1).
- Dibuat (branched off) dari:
4. Struktur Penamaan Branch & Commit Messageโ
Standard Penamaan Branchโ
- Fitur Baru:
feature/nama-fitur-singkatataufeature/ID-TASK-nama-fitur- Contoh:
feature/JIRA-101-login-google,feature/payment-gateway-midtrans
- Contoh:
- Bugfix (Staging):
bugfix/deskripsi-singkat-bug- Contoh:
bugfix/null-pointer-checkout,bugfix/form-validation-email
- Contoh:
- Hotfix (Production):
hotfix/deskripsi-singkat-issue- Contoh:
hotfix/payment-callback-timeout,hotfix/memory-leak-pdf-generator
- Contoh:
Standard Conventional Commitsโ
Setiap commit message harus mengikuti format baku berikut:
<type>(<scope>): <deskripsi singkat dalam kalimat aktif>
Pilihan Type:
| Type | Deskripsi |
|---|---|
feat | Penambahan fitur baru |
fix | Perbaikan bug |
docs | Perubahan dokumentasi saja |
style | Format kode, titik koma, spasi (tanpa mengubah logika) |
refactor | Restrukturisasi kode tanpa menambah fitur/memperbaiki bug |
test | Penambahan atau perbaikan unit test |
chore | Penyesuaian skrip build, konfigurasi CI/CD, atau dependency |
Contoh Commit Message:
feat(auth): add google OAuth login endpointfix(checkout): resolve price calculation discrepancy on discount promodocs(readme): update environment setup instructions
5. Contoh Kasus End-to-End (Skenario Real-World)โ
Kasus A: Pengembangan Fitur Baru Hingga Releaseโ
Skenario: Developer Budi mendapatkan tugas membuat fitur "Filter Produk Berdasarkan Kategori".
-
Persiapan Branch Lokal:
git checkout developmentgit pull origin developmentgit checkout -b feature/product-category-filter -
Pengembangan & Commit:
# ... Budi koding di lokal ...git add .git commit -m "feat(product): add category filter query parameters"git push origin feature/product-category-filter -
Merge ke Development (Battletest Area):
- Budi membuat Merge Request (MR):
feature/product-category-filterโdevelopment. - Tech Lead melakukan Code Review. Setelah Approve, MR di-merge.
- Di branch
development, fitur Budi diuji bersamaan dengan fitur Keranjang Belanja milik Siti.
- Budi membuat Merge Request (MR):
-
Promosi ke Staging (QA & Deployment Test):
- Setelah battletest aman, Tech Lead membuat MR:
developmentโstaging. - Sistem CI/CD secara otomatis menjalankan automated test dan men-deploy kode ke Server Staging.
- QA melakukan pengujian menyeluruh di Staging. Skenario dinyatakan PASS.
- Setelah battletest aman, Tech Lead membuat MR:
-
Rilis ke Production:
- Tech Lead membuat MR:
stagingโmaster. - Setelah di-merge, CI/CD men-deploy ke Server Production.
- Tag rilis dibuat:
v1.2.0.
- Tech Lead membuat MR:
Kasus B: Perbaikan Bug di Staging Saat QA Testโ
Skenario: Saat QA menguji fitur di server Staging, ditemukan bahwa tombol "Filter Kategori" mengembalikan Error 500 jika data kosong.
-
Membuat Branch Bugfix dari Staging:
git checkout staginggit pull origin staginggit checkout -b bugfix/empty-category-response-500 -
Memperbaiki Logika & Push:
# ... Budi memperbaiki null handler di controller ...git add .git commit -m "fix(product): handle empty result on category filter"git push origin bugfix/empty-category-response-500 -
Merge Back ke Staging & Development:
- Buat MR ke
staging. Setelah di-merge, CI/CD men-deploy ulang Staging. - QA melakukan re-test. Hasil: PASS.
- Langkah Krusial: Buat MR dari
bugfix/empty-category-response-500kedevelopmentagar perbaikan tersebut juga berada di branch development.
- Buat MR ke
Kasus C: Perbaikan Critical Hotfix di Productionโ
Skenario: Pada jam 2 siang di Production, aplikasi crash saat pengguna melakukan checkout dengan metode pembayaran QRIS.
-
Isolasi Masalah via Hotfix Branch dari Master:
git checkout mastergit pull origin mastergit checkout -b hotfix/qris-null-payload-crash -
Perbaikan Cepat (Fast Fix):
# ... Senior Dev membenarkan parsing payload QRIS ...git add .git commit -m "fix(payment): add safety check for empty QRIS payload response"git push origin hotfix/qris-null-payload-crash -
Deployment Emergency ke Production:
- MR
hotfix/qris-null-payload-crashโmasterdi-approve secara prioritas oleh Tech Lead. - Setelah di-merge, CI/CD men-deploy perbaikan langsung ke Production.
- Buat Release Tag baru:
v1.2.1.
- MR
-
Sinkronisasi Kembali (Sync-Back):
- Merge
hotfix/qris-null-payload-crashke branchstaging. - Merge
hotfix/qris-null-payload-crashke branchdevelopment. - Hapus branch
hotfix/qris-null-payload-crash.
- Merge
6. Aturan Emas (Golden Rules)โ
- ๐ซ NEVER DIRECT PUSH TO PROTECTED BRANCHES: Dilarang keras melakukan
git pushlangsung kemaster,staging, maupundevelopment. Selalu gunakan Pull Request / Merge Request. - ๐ UPDATE LOCAL BEFORE CREATING BRANCH: Selalu lakukan
git pull origin <base-branch>sebelum membuat branch baru agar terhindar dari konflik kode yang tidak perlu. - ๐งน DELETE FEATURE BRANCH AFTER MERGE: Hapus branch temporer (
feature/*,bugfix/*,hotfix/*) baik di remote repository maupun lokal setelah MR berhasil di-merge. - ๐ฌ DESCRIPTIVE COMMITS & MERGE REQUESTS: Jelaskan apa yang diubah dan mengapa perubahan itu dibuat pada deskripsi MR. Sertakan screenshot atau video bukti jika ada perubahan UI.
- ๐ก๏ธ STAGING MUST PASS DEPLOYMENT & QA: Jangan pernah merilis kode ke
masterjika deployment Staging gagal atau jika masih terdapat unresolved issue dari tim QA.