Proyek yang dikerjakan sendirian tidak butuh pull request, reviewer, atau branch rilis — memasang semuanya hanya memperlambat. Tetapi “sendirian” bukan berarti Git-nya boleh asal: riwayat yang berantakan tetap menyulitkan kita sendiri enam bulan kemudian, saat bertanya “kapan persisnya fitur ini berubah?”. Kabar baiknya, workflow pribadi hanya menuntut tiga kebiasaan — commit berkala di main, tag pada setiap milestone, dan cadangan yang dibuat rutin. Section Kolaborasi Tim
sudah membahas pola-pola besarnya; section praktik ini mulai dari ujung paling sederhana: satu orang, satu repository, tetap rapi.
Kebutuhan Sendirian Tanpa Birokrasi #
Workflow tim membeli kualitas dengan upacara: branch, review, proteksi. Pada proyek pribadi tidak ada yang mengecek pekerjaan kita, jadi upacara itu tidak punya pembeli — disiplinnya berpindah sepenuhnya ke tangan sendiri. Kebutuhan yang tersisa justru yang paling mendasar:
- Checkpoint — titik aman untuk kembali ketika eksperimen sore ini merusak semalaman kerja kemarin.
- Riwayat yang terbaca — pesan commit yang menjelaskan apa dan mengapa, bukan “update lagi”.
- Milestone — penanda versi saat proyek mencapai keadaan yang layak diingat, misalnya situs pertama kali tayang.
- Cadangan — salinan di luar laptop, karena
git inittidak melindungi apa pun dari disk yang rusak.
Pola: main-Only dengan Ritme #
Pola kerjanya memangkas semua birokrasi: satu branch, main, menerima semua commit langsung. Yang menggantikan upacara adalah ritme:
| Elemen | Perintah | Kapan dijalankan |
|---|---|---|
| Commit berkala | git status, git add, git commit | setiap satu satuan kerja selesai (bukan akhir pekan) |
| Tag milestone | git tag -a v0.x.0 -m "..." | saat proyek mencapai keadaan layak ditandai |
| Kirim cadangan | git push | tiap akhir sesi kerja, atau lebih sering |
| Arsip luring | git bundle create ... --all | rutin mingguan, disimpan di luar repo |
Tag memakai bentuk annotated — penanda yang membawa pesan dan pembuatnya, pola dari section Tags dan Releases
. Penomorannya boleh jujur mulai dari v0.1.0: proyek pribadi lazim dinyatakan belum stabil sebelum v1.0.0.
Sesi Nyata: Satu Pekan Situs Pribadi #
Budi membangun situs pribadi statis. Hari pertama dibuka dengan repository dan satu berkas:
mkdir situs-pribadi && cd situs-pribadi
git init -b main
git config user.name "Budi Santoso"
git config user.email "[email protected]"
printf '<h1>Situs Budi</h1>\n' > index.html
git statusOutput yang Dihasilkan (perintah terakhir):
On branch main
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
index.html
nothing added to commit but untracked files present (use "git add" to track)Satu berkas, satu satuan kerja — langsung di-commit, bukan ditumpuk:
git add index.html
git commit -m "Rilis kerangka situs"Output yang Dihasilkan:
[main (root-commit) ae274a0] Rilis kerangka situs
1 file changed, 1 insertion(+)
create mode 100644 index.htmlSesi berlanjut: profil ditambah, catatan proyek dibuat, lalu commit kedua dan milestone pertama ditandai:
printf '<p>Halo, saya Budi.</p>\n' >> index.html
printf '# Catatan\n\n- belajar git\n' > catatan.md
git add index.html catatan.md
git commit -m "Tambah profil singkat dan catatan"
git tag -a v0.1.0 -m "Milestone: situs pertama tayang"Output yang Dihasilkan (git commit):
[main 8ad64f2] Tambah profil singkat dan catatan
2 files changed, 4 insertions(+)
create mode 100644 catatan.mdSepekan kemudian, ritme yang sama berulang — kali ini cukup diperiksa lewat bentuk ringkas --short:
printf '\n<h2>Proyek</h2>\n' >> index.html
printf '\n- latihan workflow\n' >> catatan.md
git status --short
git add -A
git commit -m "Tambah rubrik proyek dan catatan pekanan"
git tag -a v0.2.0 -m "Milestone: rubrik proyek"Output yang Dihasilkan (git status –short dan git commit):
M catatan.md
M index.html[main cf19f1e] Tambah rubrik proyek dan catatan pekanan
2 files changed, 4 insertions(+)Dua huruf M di posisi berbeda pada status --short memangkas ritual pagi: dua berkas berubah, belum ada yang dipentaskan. Hasil satu pekan kerja lalu terbaca utuh:
git log --oneline --decorate
git tag -n1Output yang Dihasilkan (dua perintah):
cf19f1e (HEAD -> main, tag: v0.2.0) Tambah rubrik proyek dan catatan pekanan
8ad64f2 (tag: v0.1.0) Tambah profil singkat dan catatan
ae274a0 Rilis kerangka situsv0.1.0 Milestone: situs pertama tayang
v0.2.0 Milestone: rubrik proyekHash di mesin pembaca akan berbeda — bentuknya tidak: tiga commit berbaris lurus di main, dua milestone tercatat sebagai tag. Riwayat semacam ini menjawab pertanyaan enam bulan mendatang tanpa perlu arkeologi; jalur pada keluaran menyesuaikan lokasi direktori.
Ritme Commit: Harian atau per Fitur #
Kapan sebaiknya tombol commit ditekan? Dua gaya yang sehat berdiri bersebelahan:
| Gaya | Bentuknya | Cocok saat | Risiko bila salah |
|---|---|---|---|
| per satuan kerja | “selesai satu fungsi/berkas → commit” | proyek aktif dikembangkan | jarang menumpuk utang |
| per sesi | “akhir sesi → commit semua” | proyek iseng / eksplorasi | commit raksasa berisi 10 hal sekaligus |
Commit raksasa adalah musuh utama proyek pribadi: pesannya terpaksa generik dan git bisect kehilangan presisinya. Aturan praktisnya satu kalimat — bila pesan commit butuh kata “dan”, pertimbangkan memecahnya.
Backup: Remote Rutin, Bundle Mingguan #
Ritme terakhir menjawab kebutuhan yang paling sering diabaikan: cadangan. Push rutin membarui salinan pekerjaan di tempat lain, dan tag ikut serta secara eksplisit:
git init --bare ../situs-pribadi-backup.git
git remote add origin ../situs-pribadi-backup.git
git push -u origin main
git push origin --tagsOutput yang Dihasilkan (dua push):
To ../situs-pribadi-backup.git
* [new branch] main -> main
branch 'main' set up to track 'origin/main'.To ../situs-pribadi-backup.git
* [new tag] v0.1.0 -> v0.1.0
* [new tag] v0.2.0 -> v0.2.0git push memang tidak membawa tag secara bawaan — perilaku ini dibahas tuntas di Berbagi Tag ke Remote
. Lapis kedua untuk arsip luring: git bundle membungkus seluruh riwayat menjadi satu berkas biasa, layak disimpan di USB atau disandarkan ke penyimpanan awan:
git bundle create cadangan-mingguan.bundle --all
git bundle verify cadangan-mingguan.bundleOutput yang Dihasilkan (git bundle verify):
cadangan-mingguan.bundle is okay
The bundle contains these 5 refs:
cf19f1e90f4b395dfc15d21edbab77eff534e557 refs/heads/main
cf19f1e90f4b395dfc15d21edbab77eff534e557 refs/remotes/origin/main
a4a1706f98df5dc92fca03d8f079336c14adadcf refs/tags/v0.1.0
c8631bccdcc01a7263796ca43a9a0af556059c5b refs/tags/v0.2.0
cf19f1e90f4b395dfc15d21edbab77eff534e557 HEAD
The bundle records a complete history.
The bundle uses this hash algorithm: sha1Satu berkas, seluruh riwayat, terverifikasi utuh — teknik ini dibedah lengkap di Backup Repository dan rincian perintahnya terdokumentasi di dokumentasi git bundle .
Kapan Saatnya Naik Kelas #
Pola main-only berhenti pas begitu satu kebutuhan muncul: eksperimen. Saat Budi ingin mencoba desain ulang beranda tanpa merusak versi tayang, main tidak lagi cukup — ia butuh jalur paralel tempat kegagalan tidak meracuni riwayat utama. Saat itulah branch masuk: bukan birokrasi, melainkan alat isolasi, persis maknanya di Konsep Branch
. Tanda-tanda lain menyusul: proyek mulai dirilis ke orang lain (butuh alur rilis), atau ada kontributor kedua (butuh review). Chapter berikutnya mengambil tanda pertama itu dan menjalankannya tuntas: satu fitur nyata — pencarian pada situs web kecil — dikerjakan lewat branch penuh, dari scaffold sampai merge dan tag.