Di proyek ini kamu memakai semua yang sudah dipelajari dalam satu alur: commit awal, satu branch per fitur, merge ke main, lalu tag untuk rilis. Alur ini disebut feature branch workflow. Bayangin redaksi majalah. main itu edisi utama yang selalu rapi. Tiap rubrik ditulis di draft-nya sendiri (branch), dan baru dimasukkan ke edisi utama setelah selesai (merge). Waktu semua rubrik sudah masuk, edisinya dicap "Edisi 1.0" (tag), supaya kapan pun bisa dicari lagi persis seperti waktu terbit.
🧪 Tebakan cepat: kalau kamu mengikuti langkahnya persis, berapa commit yang ada di
maindi akhir: 3, 4, atau 5? Tebak dulu, jawabannya ada di bagian "Menghitung commit di main".
Rencananya
Project-nya website kecil dengan tiga file: index.html, navbar.html, dan footer.html. Navbar dan footer dikerjakan di branch masing-masing.
git init, commit semua file sebagaiinitial setup.- Branch
feature-navbar: ubahnavbar.html, commitadd navbar, merge kemain. - Branch
feature-footer: ubahfooter.html, commitadd footer, merge kemain. - Di
main, buat tagv1.0.
o initial setup -- o add navbar -- o add footer <- main, tag v1.0
Langkah demi langkah
$ git init
$ git add .
$ git commit -m "initial setup"
$ git switch -c feature-navbar # atau: git checkout -b feature-navbar
$ echo "Kontak" >> navbar.html
$ git add navbar.html
$ git commit -m "add navbar"
$ git switch main # atau: git checkout main
$ git merge feature-navbar
Updating 1a2b3c4..5d6e7f8
Fast-forward
navbar.html | 1 +
1 file changed, 1 insertion(+)
$ git switch -c feature-footer
$ echo "Budi 2026" >> footer.html
$ git add footer.html
$ git commit -m "add footer"
$ git switch main
$ git merge feature-footer
Updating 5d6e7f8..9a0b1c2
Fast-forward
footer.html | 1 +
1 file changed, 1 insertion(+)
$ git tag v1.0
$ git tag
v1.0
echo ... >> navbar.htmlmenambah satu baris ke file. Git cuma mau commit kalau ada yang berubah. Tanpa perubahan,git commitmenjawabnothing to commit, working tree clean.git add navbar.htmlcuma menyiapkan file itu.git add .juga boleh, karena cuma file itu yang berubah.git switch -cmembuat branch sekaligus pindah, sama dengangit checkout -b. Dua-duanya jalan.- Merge selalu dijalankan dari
main: pindah kemaindulu, lalugit merge nama-branch. feature-footerdibuat darimainyang sudah berisi navbar, jadi footer dibangun di atas versi terbaru.
Menghitung commit di main
| Sesudah | main menunjuk ke |
Commit di main |
|---|---|---|
| commit "initial setup" | initial setup | 1 |
git merge feature-navbar |
add navbar | 2 |
git merge feature-footer |
add footer | 3 |
Kedua merge-nya fast-forward: waktu di-merge, main belum bergerak sejak branch fiturnya dibuat, jadi Git cukup menggeser main maju tanpa membuat commit baru. Hasilnya main punya 3 commit. Itu jawaban tebakannya.
Kalau kedua branch dibuat bersamaan dari "initial setup", merge yang kedua gak bisa fast-forward, karena main sudah maju duluan. Git lalu membuat merge commit, commit khusus dengan dua parent, dan git log menampilkan 4 commit. Syarat latihannya, minimal 3 commit di main, tetap terpenuhi dengan dua cara itu.
Tag rilis di akhir
git tag v1.0 memasang label tetap di commit tempat HEAD berada. Bedanya dengan branch: branch maju tiap ada commit baru, tag diam di commit itu selamanya. Makanya tag dibuat paling akhir, di main, setelah kedua fitur masuk. Cek hasilnya dengan git tag.
⚠️ Jebakan yang sering ketemu
- Berakhir di branch fitur. Setelah merge terakhir, posisimu harus di
main. Latihannya mengecek itu. - Tag terlalu cepat.
git tag v1.0sebelum footer di-merge menempel di commit "add navbar", jadi rilis v1.0 gak punya footer. - Merge dari arah yang salah.
git merge mainsambil berada difeature-navbarmenggerakkanfeature-navbar, bukanmain. Pindah kemaindulu. - Commit tanpa perubahan. Kalau file-nya gak diubah, Git asli menolak commit. Ubah file dulu, baru
git adddangit commit.
📌 Langkah berikutnya: berbagi lewat GitHub
Sejauh ini semuanya ada di laptopmu. Supaya tim bisa ikut, repo-nya disimpan juga di server seperti GitHub, yang disebut remote. Empat perintah ini dibahas lengkap di materi Git Remote & Clone dan Git Push & Pull:
$ git clone https://github.com/user/repo.git # salin repo dari GitHub ke laptop
$ git push origin main # kirim commit di main ke GitHub
$ git pull # ambil perubahan terbaru dari GitHub, lalu gabungkan
git pullitugit fetch(ambil) ditambahgit merge(gabungkan).- Kalau GitHub sudah punya commit yang belum ada di laptopmu, push ditolak:
$ git push origin main
! [rejected] main -> main (fetch first)
error: failed to push some refs to 'https://github.com/user/repo.git'
Solusinya: git pull dulu supaya commit itu ikut tergabung, baru git push lagi.
TL;DR: Feature branch workflow: commit awal di main, satu branch per fitur (git switch -c feature-navbar), ubah file dan commit di sana, kembali ke main lalu git merge, ulangi untuk fitur berikutnya, dan terakhir git tag v1.0 di main. Kalau tiap fitur di-merge sebelum fitur berikutnya dimulai, semua merge-nya fast-forward dan main berakhir dengan 3 commit. Merge selalu dari main, tag paling akhir, dan posisi akhirmu di main. Berikutnya: git clone, git push origin main, dan git pull buat berbagi lewat GitHub.