Fitur terakhir aplikasi kas — laporan harian — menaikkan level kolaborasi: kali ini pekerjaan tidak langsung menempel di main, melainkan hidup di branch fitur/laporan yang sama-sama dijangkau Budi dan Siti lewat remote. Branch itu dikerjakan berdua dari dua clone berbeda, digabungkan ke main dengan gelembung --no-ff supaya batas fiturnya terlihat, lalu dibersihkan sampai pusat, kedua clone, dan daftar branch tidak menyisakan jejaknya.
Membuka Branch Fitur di Remote #
Siti memulai fitur dari siti/kas, tempat main-nya sedang berada:
git switch -c fitur/laporanOutput yang Dihasilkan:
Switched to a new branch 'fitur/laporan'Fitur laporan menghitung ringkasan dari daftar transaksi yang sudah ada:
printf '\n## Laporan\n\nTotal penjualan: Rp45.000\nTotal pengeluaran: Rp12.000\nSaldo: Rp33.000\n' >> src/app.txt
cat src/app.txtOutput yang Dihasilkan (perintah cat):
Aplikasi Kas v1
===============
Catat pemasukan dan pengeluaran warung setiap hari.
## Transaksi
- 2026-11-16 — Penjualan pagi: Rp45.000
- 2026-11-16 — Beli bahan: Rp12.000
## Laporan
Total penjualan: Rp45.000
Total pengeluaran: Rp12.000
Saldo: Rp33.000Commit milik Siti, lalu pengiriman branch-nya ke pusat:
git add src/app.txt
git -c user.name="Siti Rahma" -c user.email="[email protected]" commit -m "Tambah laporan harian pada aplikasi kas"Output yang Dihasilkan:
[fitur/laporan a9200c9] Tambah laporan harian pada aplikasi kas
1 file changed, 6 insertions(+)git push -u origin fitur/laporanOutput yang Dihasilkan:
To /home/z/my-project/tutorial-extracted/work/sandbox/proyek-git/proyek-03/kolaborasi-kas/siti/../pusat-kas.git
* [new branch] fitur/laporan -> fitur/laporan
branch 'fitur/laporan' set up to track 'origin/fitur/laporan'.git push hanya mengirim branch yang disebut — main tidak ikut. Baris * [new branch] melaporkan kelahiran fitur/laporan di pusat, dan flag -u mengikat branch lokal Siti ke salinan pusatnya — pola yang sama dengan push pertama Budi di Bagian 1. Branch ini kini menjadi ruang kerja bersama yang bisa dijangkau siapa pun yang menarik dari pusat.
Budi Mengambil Branch: Tracking Otomatis #
Budi melanjutkan pekerjaan Siti. Dari budi/kas, tarik dulu kabar terbaru:
git fetch originOutput yang Dihasilkan:
From /home/z/my-project/tutorial-extracted/work/sandbox/proyek-git/proyek-03/kolaborasi-kas/budi/../pusat-kas
* [new branch] fitur/laporan -> origin/fitur/laporanBaris itu melaporkan lahirnya salinan origin/fitur/laporan di clone Budi. Budi cukup beralih ke nama branch-nya — tanpa -c:
git switch fitur/laporanOutput yang Dihasilkan:
Switched to a new branch 'fitur/laporan'
branch 'fitur/laporan' set up to track 'origin/fitur/laporan'.Inilah tracking otomatis: karena sebuah branch bernama fitur/laporan belum ada secara lokal, git switch membuatnya dari origin/fitur/laporan sekaligus memasang ikatan keduanya — perilaku yang dibedah di Tracking Branch
dan Remote-Tracking Branch
. Branch lokal Budi kini menunjuk commit yang sama dengan branch lokal Siti, meski keduanya lahir di mesin berbeda.
Kontribusi Budi pada branch ini: melengkapi dokumentasi fitur laporan pada README:
cat > README.md <<'EOF'
# Aplikasi Kas
Kas warung sederhana berbasis teks untuk warung kecil —
latihan kolaborasi dua kontributor untuk Course Git Proyek 03.
## Struktur
- `src/app.txt` — isi aplikasi kas
## Cara Pakai
Tambahkan baris transaksi pada `src/app.txt` dengan format
tanggal — keterangan: jumlah. Laporan harian dihitung dari
daftar transaksi tersebut.
## Kontributor
- Budi Santoso — perintis aplikasi
- Siti Rahma — fitur transaksi dan laporan
EOF
git add README.md
git commit -m "Lengkapi dokumentasi fitur laporan"Output yang Dihasilkan (perintah git commit):
[fitur/laporan aec7cba] Lengkapi dokumentasi fitur laporan
1 file changed, 3 insertions(+), 2 deletions(-)Push-nya kini berjalan dengan nama branch polos, karena ikatan upstream sudah terpasang:
git pushOutput yang Dihasilkan:
To /home/z/my-project/tutorial-extracted/work/sandbox/proyek-git/proyek-03/kolaborasi-kas/budi/../pusat-kas.git
a9200c9..aec7cba fitur/laporan -> fitur/laporanGiliran Siti menutup putaran — dari siti/kas, branch yang sama diperbarui lewat git pull:
git pullOutput yang Dihasilkan:
From /home/z/my-project/tutorial-extracted/work/sandbox/proyek-git/proyek-03/kolaborasi-kas/siti/../pusat-kas
a9200c9..aec7cba fitur/laporan -> origin/fitur/laporan
Updating a9200c9..aec7cba
Fast-forward
README.md | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)Satu branch, dua kontributor, tiga salinan — selalu sejajar berkat pusat. Fitur laporan kini lengkap: isi aplikasi dari Siti, dokumentasinya dari Budi.
Merge ke main dan Pembersihan #
Branch yang selesai waktunya kembali ke rumah. Budi, masih di budi/kas, berpindah ke main lalu menggabungkan dengan --no-ff:
git switch mainOutput yang Dihasilkan:
Switched to branch 'main'
Your branch is up to date with 'origin/main'.git merge --no-ff fitur/laporan -m "Gabungkan fitur laporan harian"Output yang Dihasilkan:
Merge made by the 'ort' strategy.
README.md | 5 +++--
src/app.txt | 6 ++++++
2 files changed, 9 insertions(+), 2 deletions(-)Flag --no-ff menolak penggeseran polos dan menghadirkan gelembung merge — kedua commit fitur tetap terbaca sebagai satu kesatuan di graf riwayat. Kirim hasilnya, lalu bersihkan branch remote:
git pushOutput yang Dihasilkan:
To /home/z/my-project/tutorial-extracted/work/sandbox/proyek-git/proyek-03/kolaborasi-kas/budi/../pusat-kas.git
c27773b..4d1472a main -> maingit push origin --delete fitur/laporanOutput yang Dihasilkan:
To /home/z/my-project/tutorial-extracted/work/sandbox/proyek-git/proyek-03/kolaborasi-kas/budi/../pusat-kas.git
- [deleted] fitur/laporanBaris - [deleted] melaporkan lenyapnya branch dari pusat — perintah lengkapnya dibahas di Menghapus Remote Branch
. Branch lokal Budi ikut dibersihkan; karena isinya sudah tergabung di main, -d mengizinkannya:
git branch -d fitur/laporanOutput yang Dihasilkan:
Deleted branch fitur/laporan (was aec7cba).Siti Menyinkronkan dan Memangkas Jejak #
Clone Siti masih menyimpan dua jejak lama: branch lokalnya dan salinan origin/fitur/laporan. Dari siti/kas:
git switch mainOutput yang Dihasilkan:
Switched to branch 'main'
Your branch is up to date with 'origin/main'.Kabar “up to date” itu perlu dibaca hati-hati: yang dibandingkan adalah salinan origin/main hasil fetch terakhir Siti — cermin yang belum tahu pusat sudah maju ke 4d1472a. Pull memperbarui cermin sekaligus branch:
git pullOutput yang Dihasilkan:
From /home/z/my-project/tutorial-extracted/work/sandbox/proyek-git/proyek-03/kolaborasi-kas/siti/../pusat-kas
c27773b..4d1472a main -> origin/main
Updating c27773b..4d1472a
Fast-forward
README.md | 5 +++--
src/app.txt | 6 ++++++
2 files changed, 9 insertions(+), 2 deletions(-)Salinan origin/fitur/laporan di clone Siti kini menunjuk branch yang sudah tidak ada di pusat. Fetch biasa membiarkannya; --prune memangkasnya:
git fetch --pruneOutput yang Dihasilkan:
From /home/z/my-project/tutorial-extracted/work/sandbox/proyek-git/proyek-03/kolaborasi-kas/siti/../pusat-kas
- [deleted] (none) -> origin/fitur/laporanPeta branch setelah pemangkasan:
git branch -aOutput yang Dihasilkan:
fitur/laporan
* main
remotes/origin/HEAD -> origin/main
remotes/origin/mainSisi remotes/origin/ sudah bersih — hanya main tersisa. Branch lokal fitur/laporan milik Siti masih ada; salinan remote sudah tidak lagi menjadi alasan untuk mempertahankannya:
git branch -d fitur/laporanOutput yang Dihasilkan:
Deleted branch fitur/laporan (was aec7cba).Keadaan Akhir dan Ringkasan Proyek #
Graf akhir dari clone Siti — bentuk yang sama tampil di clone Budi dan bisa dibaca langsung dari pusat:
git log --oneline --graph --decorateOutput yang Dihasilkan:
* 4d1472a (HEAD -> main, origin/main, origin/HEAD) Gabungkan fitur laporan harian
|\
| * aec7cba Lengkapi dokumentasi fitur laporan
| * a9200c9 Tambah laporan harian pada aplikasi kas
|/
* c27773b Merge remote-tracking branch 'origin/main'
|\
| * c7999c4 Perjelas sasaran aplikasi pada README
* | d8f1081 Sebutkan dua kontributor pada README
|/
* ae8e469 Tambah daftar kontributor
* 33144cd Tambah daftar transaksi harian
* 03322c3 Rintis aplikasi kas v1Sembilan commit dua penulis yang terbaca sebagai cerita kolaborasi: rintisan Budi, fitur transaksi Siti, daftar kontributor, pertabrakan README yang diurai jadi gelembung pertama, dan fitur laporan dua tangan yang menjadi gelembung kedua. Isi src/app.txt di kedua clone kini persis berkas yang menyertai halaman proyek ini — versi 1, transaksi, laporan.
| Bagian | Pencapaian | Perintah inti |
|---|---|---|
| Bagian 1 | pusat bare, dua clone, commit pertama menyebar ke rekan | git init --bare, git clone, git push -u |
| Bagian 2 | siklus giliran push–fetch–merge–pull dengan bukti fetch tidak menggabungkan | git fetch, git merge origin/main, git pull |
| Bagian 3 | push rejected direproduksi lalu dituntaskan lewat konflik dan merge commit | git push, git fetch, git add, git commit --no-edit |
| Bagian 4 | branch remote dikerjakan berdua, digabung --no-ff, dibersihkan total | git switch, git push -u, git merge --no-ff, git push origin --delete, git fetch --prune |
Konsep yang dipakai di sepanjang proyek dan tempat teorinya bila ingin diulang:
- salinan penunjuk
origin/*— Remote-Tracking Branch dan kerangka mutakhirnya di Sinkronisasi Remote ; - ikatan branch lokal ke remote — Upstream Branch dan Tracking Branch ;
- penolakan push dan penyelesaiannya — Push Rejected serta Non-Fast-Forward Push ;
- umur branch di remote — Menghapus Remote Branch .
Dua orang, satu pusat, sembilan commit — dan seluruh gesekan kolaborasi yang muncul sudah punya ritual penyelesaiannya. Namun dalam proyek ini setiap perubahan langsung dipercaya: Budi mengambil pekerjaan Siti begitu tiba, tanpa sempat menimbangnya. Proyek berikutnya memasang gerbang itu — perubahan ditinjau dulu lewat simulasi code review sebelum boleh masuk: Proyek 04: Simulasi Code Review .