Setiap fitur yang sehat lahir dari basis yang tenang: main yang bersih, sudah ter-commit, dan tidak menyimpan pekerjaan setengah jadi. Bagian ini menyiapkan basis aplikasi Catatan Tugas, membuka branch fitur/tugas, lalu menumbuhkan fitur “daftar tugas” lewat dua commit bertahap — kerangka dahulu, isi menyusul. Disiplin satu commit satu langkah yang kita latih di sini menjadi bekal untuk seluruh proyek, termasuk saat riwayat harus dirapikan pada Bagian 4.
Menyiapkan Basis di main #
Dari sebuah folder kerja kosong, buat repository sekaligus tetapkan identitas lokal. Identitas dipasang tanpa --global sehingga hanya berlaku untuk repository ini — kebiasaan yang dijelaskan tuntas di Konfigurasi Identitas
:
mkdir catatan-tugas && cd catatan-tugas
git init -b main
git config user.name "Budi Santoso"
git config user.email "[email protected]"Output yang Dihasilkan (perintah git init):
Initialized empty Git repository in /home/z/my-project/tutorial-extracted/work/sandbox/proyek-git/proyek-02/catatan-tugas/.git/Opsi -b main menetapkan nama branch awal sejak repository lahir, sehingga kita tidak perlu menamai ulang branch master bawaan. Jalur pada keluaran menyesuaikan lokasi direktori di mesin kita.
Selanjutnya, isi awal proyek: sebuah README.md yang menjelaskan tujuan proyek, dan src/app.txt berisi kerangka aplikasi versi 0 — hanya judul dan satu baris penanda bahwa fitur menyusul:
cat > README.md <<'EOF'
# Catatan Tugas
Aplikasi latihan untuk Course Git — Proyek 02: workflow feature
branch dari persiapan basis sampai perapian riwayat.
## Struktur
- `src/app.txt` — isi aplikasi
- `docs/changelog.md` — catatan perubahan
EOF
mkdir src
printf 'Aplikasi Catatan Tugas\n======================\n\n(draf awal — fitur menyusul)\n' > src/app.txt
cat src/app.txtOutput yang Dihasilkan (perintah cat):
Aplikasi Catatan Tugas
======================
(draf awal — fitur menyusul)Periksa keadaan repository sebelum commit pertama:
git statusOutput yang Dihasilkan:
On branch main
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
README.md
src/
nothing added to commit but untracked files present (use "git add" to track)Kedua berkas masih untracked — Git melihat keberadaannya, tetapi isinya belum pernah dicatat. Angkat semuanya ke staging area, lalu commit basis:
git add .
git commit -m "Rintis aplikasi catatan tugas"Output yang Dihasilkan:
[main (root-commit) ae67134] Rintis aplikasi catatan tugas
2 files changed, 13 insertions(+)
create mode 100644 README.md
create mode 100644 src/app.txtTanda (root-commit) menandai commit pertama yang tidak punya parent. Hash ae67134 akan berbeda di mesin kita — hash dipengaruhi isi, pesan, dan waktu pembuatan. Sejak commit ini, main berdiri tenang dan siap menjadi titik berangkat fitur pertama.
Membuka Branch fitur/tugas #
Fitur “daftar tugas” tidak disentuhkan langsung ke main. Buat branch khusus dengan git switch -c:
git switch -c fitur/tugasOutput yang Dihasilkan:
Switched to a new branch 'fitur/tugas'Opsi -c sekaligus membuat branch dan berpindah ke sana — perilaku yang dibedah di Membuat Branch
. Nama fitur/tugas mengikuti konvensi fitur/<nama> yang memudahkan pembacaan tujuan branch; alasan penamaan seperti ini dibahas di Strategi Branching
. Perhatikan bahwa isi folder tidak berubah sedikit pun — branch baru menunjuk ke commit yang sama dengan main, dan main pun tidak tersentuh.
Menumbuhkan Fitur dalam Dua Commit #
Commit pertama memasang kerangka bagian baru: judul seksi diikuti satu baris placeholder:
printf '\n## Daftar Tugas\n\n(tugas baru ditulis di sini)\n' >> src/app.txt
cat src/app.txtOutput yang Dihasilkan (perintah cat):
Aplikasi Catatan Tugas
======================
(draf awal — fitur menyusul)
## Daftar Tugas
(tugas baru ditulis di sini)Simpan sebagai satu commit:
git add src/app.txt
git commit -m "Tambah kerangka daftar tugas"Output yang Dihasilkan:
[fitur/tugas 0a15ce0] Tambah kerangka daftar tugas
1 file changed, 4 insertions(+)Empat baris baru masuk: satu baris kosong, judul seksi, satu baris kosong lagi, dan placeholder. Commit kedua mengganti placeholder dengan isi sungguhan — dua tugas contoh:
printf 'Aplikasi Catatan Tugas\n======================\n\n## Daftar Tugas\n\n- [ ] Susun jadwal harian\n- [ ] Belajar Git satu jam\n' > src/app.txt
cat src/app.txtOutput yang Dihasilkan (perintah cat):
Aplikasi Catatan Tugas
======================
## Daftar Tugas
- [ ] Susun jadwal harian
- [ ] Belajar Git satu jamgit add src/app.txt
git commit -m "Isi daftar tugas awal"Output yang Dihasilkan:
[fitur/tugas e64b462] Isi daftar tugas awal
1 file changed, 2 insertions(+), 3 deletions(-)Perhatikan bedahannya: 2 insertions(+), 3 deletions(-) — dua baris tugas masuk, sementara placeholder dan baris penanda draf hilang bersama baris kosong pemisahnya. Diff kecil seperti ini terbaca sekali lirik; itulah ukuran sehat satu commit.
Disiplin Satu Commit Satu Langkah #
Fitur selesai. Dua pemeriksaan penutup memastikan keadaan bersih:
git statusOutput yang Dihasilkan:
On branch fitur/tugas
nothing to commit, working tree cleangit log --onelineOutput yang Dihasilkan:
e64b462 Isi daftar tugas awal
0a15ce0 Tambah kerangka daftar tugas
ae67134 Rintis aplikasi catatan tugasRiwayat branch berisi tiga commit: satu basis milik main, dua langkah fitur. Setiap commit memuat satu langkah yang bisa dinamai — kerangka, lalu isi. Pembagian ini bukan gaya-gayaan: git diff antar commit menjadi pendek, git revert bisa membatalkan satu langkah tanpa menyentuh langkah lain, dan git bisect bisa menunjuk langkah mana yang memunculkan masalah kelak.
Saat ini fitur/tugas memuat fitur lengkap, sedangkan main masih menyimpan aplikasi v0 yang polos. Bagian berikutnya menyatukan keduanya dengan --no-ff supaya batas fitur terlihat sebagai gelembung di graf riwayat: Bagian 2: Menggabungkan Perubahan
.