Mengenal GitFlow
1. Apa itu GitFlow?
GitFlow adalah model branching workflow untuk Git yang diperkenalkan oleh Vincent Driessen (2010). Tujuannya: menyediakan pola standar untuk pengembangan fitur, persiapan rilis, hotfix, dan pemeliharaan sehingga tim besar bisa bekerja secara paralel tanpa kacau.
GitFlow bukan alat, melainkan konvensi (biasa juga ada script helper bernama git-flow), yang mendefinisikan cabang-cabang utama dan bagaimana mereka berinteraksi.
2. Cabang-cabang pada GitFlow
main(ataumaster) Berisi kode yang selalu siap produksi. Hanya commit yang sudah rilis (biasanya di-tag) yang ada di sini.developTempat integrasi semua fitur. Menjadi cikal bakal release berikutnya. Setelah stabil,developdi-merge kemainlewatreleasebranch.feature/*Cabang untuk mengerjakan fitur baru. Dibuat daridevelopdan di-merge kembali kedevelop. Nama contoh:feature/auth-api.release/*Dibuat daridevelopuntuk menyiapkan rilis (bugfix minor, bump version, dokumen). Setelah siap,releasedi-merge kemain(untuk rilis) dan kembali kedevelop(untuk sinkron).hotfix/*Dibuat darimainuntuk memperbaiki bug yang perlu di-patch segera di produksi. Setelah selesai, di-merge kemain(dan biasanya di-tag), serta di-merge kembali kedevelop.
Skema ringkas (visual ASCII):
main ---o------o---------o---------- (rilis)
\ \ \
develop ---o---o---o---o---o---o---- (integrasi fitur)
\ \ /
feature/foo feature/bar3. Kapan GitFlow cocok — dan kapan tidak?
Cocok untuk:
Tim medium–besar (lebih dari 3 orang).
Rilis yang terjadwal (release cycle terpisah dari deploy).
Produk dengan lifecycle rilis (semver, rilis stabil ke production).
Ketika ingin kontrol eksplicit antara development dan production branch.
Kurang cocok untuk:
Tim kecil (1–3 orang) atau proyek yang sering deploy terus-menerus (continuous deploy).
Organisasi yang menerapkan trunk-based development / continuous delivery tanpa release branch.
Startup yang ingin very fast iterate (lebih cocok GitHub Flow atau trunk-based).
4. Alur kerja GitFlow — step-by-step
4.1. Inisialisasi (sekali)
Biasanya repo sudah punya main. Buat develop:
4.2. Membuat feature
Ambil update:
Buat branch feature:
Kerja, commit secara atomic/deskriptif:
Push dan buat Pull Request menuju
develop:
Setelah review & passing CI, merge PR ke develop. Biasanya menggunakan merge commit (bukan rebase) agar histori fitur jelas. Namun tim boleh memilih squash-merge jika ingin histori linear.
4.3. Menyiapkan release
Ketika develop sudah siap untuk rilis:
Buat release branch:
Lakukan tugas rilis: bump version, update changelog, fix bug minor, run tests.
Commit perubahan, push.
Setelah oke, merge ke
maindan tag:Merge kembali ke
developsupaya perbaikan rilis masuk ke cabang development:Delete branch release bila perlu:
4.4. Hotfix produksi
Jika bug muncul di produksi:
Buat hotfix dari
main:Perbaiki, commit, push.
Merge ke
main, tag, push:Merge ke
developjuga:Hapus branch hotfix.
5. Contoh praktis (skenario nyata)
Misalkan versi sekarang v1.4.0, dan kita mengerjakan fitur auth lalu rilis v1.5.0.
5.1. Setup
5.2. Feature
5.3. Release
6. Pilihan merge: --no-ff vs --ff-only vs rebase
--no-ff vs --ff-only vs rebase--no-ff(no fast-forward): membuat commit merge eksplisit, baik untukrelease/hotfixagar histori mencerminkan event rilis.--ff/ fast-forward: histori lebih linear, tetapi kehilangan boundary fitur/release. Jika branch tujuan belum punya commit baru sejak branch lain dibuat, Git cukup menggeser pointer ke depan. Tidak ada merge commit.
Contoh:
Jika merge normal:
Histori jadi seolah-olah commit C dan D ditulis langsung di main → informasi bahwa itu pekerjaan “release” hilang(branch seperti tidak pernah ada).
Rebase: merapikan commit sebelum merge; bagus untuk fitur privat sebelum dibagikan. Jangan rebase branch yang sudah dipush dan dipakai orang lain.
Rekomendasi GitFlow:
Merge PR fitur ke
developmenggunakan merge commit (atau squash sesuai kebijakan tim).Merge
releasedanhotfixkemaindengan--no-ffuntuk menandai rilis.
7. Versi dan Tagging
Biasanya dipasangkan dengan Semantic Versioning (SemVer): MAJOR.MINOR.PATCH.
MAJOR: perubahan breaking.
MINOR: fungsi baru kompatibel.
PATCH: bugfix.
Praktik: setiap merge release ke main → buat annotated tag (git tag -a vX.Y.Z -m "...") → push tag.
8. Integrasi CI/CD
GitFlow cocok dipasangkan dengan pipeline:
CI berjalan di setiap PR (lint, tests, build).
Pipeline untuk
developdapat menjalankan staging deploy otomatis.Pipeline untuk
mainberjalan setelah tag dibuat → job: build artifact, publish, deploy production.
Contoh aturan:
PR ke
develop→ jalankan unit tests & integration tests.Merge ke
release/*→ jalankan full test suite, build artifact, dan snapshot deploy ke staging.Merge ke
main+ tag → rilis otomatis ke production.
9. Best practices & aturan tim
Naming convention Gunakan pola:
feature/<name>,bugfix/<id>-short,hotfix/<id>,release/<x.y.z>. Konsisten.Atomic commits & pesan Gunakan Conventional Commits:
feat:,fix:,chore:,docs:untuk memudahkan changelog otomatis.PR checklist
Deskripsi singkat & alasan perubahan
Link issue / ticket
Test unit & integrasi lulus
Reviewer minimal 1–2 orang
Tidak ada secrets di commit
Jangan rebase branch publik Jika sudah dipush dan direview orang lain, hindari mengubah histori.
Merge strategy Putuskan apakah fitur di-merge dengan merge commit atau squash. Dokumentasikan.
Release notes & changelog Otomatiskan changelog dari commit atau PR (mis. conventional-changelog, release-drafter).
Protect branch Buat protected branches di remote (main/develop): require PR review, passing CI, no force pushes.
10. Konflik & resolusi
Konflik akan muncul saat merge feature ke develop atau saat merge release ke main/develop.
Selalu update lokal branch dari target sebelum merge:
Resolve conflict, run tests, commit hasil resolve, push.
Catatan: pilih strategi (rebase vs merge) secara konsisten di tim.
11. Kelebihan & Kekurangan GitFlow
Kelebihan
Struktur jelas antara development & production.
Mudah koordinasi tim besar.
Rilis terencana dengan release branch.
Hotfix cepat karena branch dari
main.
Kekurangan
Cukup verbose—banyak branch dan proses, overhead untuk tim kecil.
Tidak ideal jika ingin deploy frequently (CD).
Bisa menimbulkan merge friction bila branch lama dibiarkan terpisah lama.
12. Alternatif populer
GitHub Flow:
main+ short-lived feature branches; cocok continuous deploy.Trunk-based Development: semua developer commit ke trunk (
main) sering; cocok CI/CD & feature flags.GitLab Flow: campuran model, bisa menyesuaikan environment (staging/production).
Pilih workflow sesuai kebutuhan tim: stabilitas (GitFlow) vs kecepatan deploy (Trunk/GitHub Flow).
13. Contoh praktik lanjut: script helper dan tips
GitFlow helper (opsional)
Ada tool git-flow yang memfasilitasi perintah:
Tool ini otomasi steps merge/tag, tapi beberapa tim memilih manual agar kontrol lebih jelas.
Tips performa kerja
Buat fitur kecil (small, focused).
Merge sering agar konflik kecil.
Gunakan feature toggle untuk fitur besar agar bisa merge lebih awal tanpa mengaktifkan di prod.
Automasi release notes & changelog.
14. Template PR untuk GitFlow
15. Checklist siap rilis (contoh)
16. FAQ singkat
Q: Harus pakai develop?
A: Tidak wajib, tapi GitFlow mengasumsikan develop sebagai tempat integrasi. Jika tim lebih suka main-only flows, pilih GitHub Flow atau Trunk.
Q: Apakah membuat banyak branch bikin repo berat? A: Branch di Git itu pointers, bukan salinan data — tidak membuat repo “berat” signifikan. Risiko adalah kompleksitas manajemen, bukan ukuran repo.
Q: Merge atau rebase untuk feature? A: Untuk histori tim, prefer merge (retain feature boundary). Untuk membersihkan commit pribadi, rebase lokal sebelum push.
17. Ringkasan & rekomendasi akhir
GitFlow adalah pola workflow yang solid untuk tim yang butuh pemisahan jelas antara development dan produksi, terutama ketika rilis terjadwal dan ada kebutuhan hotfix. Namun, jika timmu mengutamakan kecepatan deploy (continuous deployment), pertimbangkan GitHub Flow atau trunk-based.
Rekomendasi implementasi singkat:
Inisialisasi
main+develop.Gunakan
feature/*untuk pengembangan, PR kedevelop.Siapkan
release/*untuk rilis; merge kemain+ tag; merge kembali kedevelop.Tangani urgent bug via
hotfix/*darimain.Protect branches, paksa PR review & CI passing.
18. Bonus: Quick reference — perintah penting
Kalau kamu mau, saya bisa:
Mengubah artikel ini jadi bahasa Inggris untuk Medium global.
Memformat ulang jadi series (bagian 1: konsep, bagian 2: praktik & perintah, bagian 3: CI/CD).
Menambahkan contoh file konfigurasi CI (GitHub Actions / GitLab CI) yang spesifik untuk GitFlow.
18. Saya Prefer Git Workflow yang Mana?
Saya pribadi lebih suka hal yang simple seperti Artivisi Flow yang digunakan oleh Perusahaan Artivisi. https://software.endy.muhardin.com/aplikasi/workflow-git-manajemen/
Last updated