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 :

bash
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):

text
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:

bash
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.txt

Output yang Dihasilkan (perintah cat):

text
Aplikasi Catatan Tugas
======================

(draf awal — fitur menyusul)

Periksa keadaan repository sebelum commit pertama:

bash
git status

Output yang Dihasilkan:

text
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:

bash
git add .
git commit -m "Rintis aplikasi catatan tugas"

Output yang Dihasilkan:

text
[main (root-commit) ae67134] Rintis aplikasi catatan tugas
 2 files changed, 13 insertions(+)
 create mode 100644 README.md
 create mode 100644 src/app.txt

Tanda (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:

bash
git switch -c fitur/tugas

Output yang Dihasilkan:

text
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.

Commit pertama memasang kerangka bagian baru: judul seksi diikuti satu baris placeholder:

bash
printf '\n## Daftar Tugas\n\n(tugas baru ditulis di sini)\n' >> src/app.txt
cat src/app.txt

Output yang Dihasilkan (perintah cat):

text
Aplikasi Catatan Tugas
======================

(draf awal — fitur menyusul)

## Daftar Tugas

(tugas baru ditulis di sini)

Simpan sebagai satu commit:

bash
git add src/app.txt
git commit -m "Tambah kerangka daftar tugas"

Output yang Dihasilkan:

text
[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:

bash
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.txt

Output yang Dihasilkan (perintah cat):

text
Aplikasi Catatan Tugas
======================

## Daftar Tugas

- [ ] Susun jadwal harian
- [ ] Belajar Git satu jam
bash
git add src/app.txt
git commit -m "Isi daftar tugas awal"

Output yang Dihasilkan:

text
[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:

bash
git status

Output yang Dihasilkan:

text
On branch fitur/tugas
nothing to commit, working tree clean
bash
git log --oneline

Output yang Dihasilkan:

text
e64b462 Isi daftar tugas awal
0a15ce0 Tambah kerangka daftar tugas
ae67134 Rintis aplikasi catatan tugas

Riwayat 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 .