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:

bash
git switch -c fitur/laporan

Output yang Dihasilkan:

text
Switched to a new branch 'fitur/laporan'

Fitur laporan menghitung ringkasan dari daftar transaksi yang sudah ada:

bash
printf '\n## Laporan\n\nTotal penjualan: Rp45.000\nTotal pengeluaran: Rp12.000\nSaldo: Rp33.000\n' >> src/app.txt
cat src/app.txt

Output yang Dihasilkan (perintah cat):

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

Commit milik Siti, lalu pengiriman branch-nya ke pusat:

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

text
[fitur/laporan a9200c9] Tambah laporan harian pada aplikasi kas
 1 file changed, 6 insertions(+)
bash
git push -u origin fitur/laporan

Output yang Dihasilkan:

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

bash
git fetch origin

Output yang Dihasilkan:

text
From /home/z/my-project/tutorial-extracted/work/sandbox/proyek-git/proyek-03/kolaborasi-kas/budi/../pusat-kas
 * [new branch]      fitur/laporan -> origin/fitur/laporan

Baris itu melaporkan lahirnya salinan origin/fitur/laporan di clone Budi. Budi cukup beralih ke nama branch-nya — tanpa -c:

bash
git switch fitur/laporan

Output yang Dihasilkan:

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

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

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

bash
git push

Output yang Dihasilkan:

text
To /home/z/my-project/tutorial-extracted/work/sandbox/proyek-git/proyek-03/kolaborasi-kas/budi/../pusat-kas.git
   a9200c9..aec7cba  fitur/laporan -> fitur/laporan

Giliran Siti menutup putaran — dari siti/kas, branch yang sama diperbarui lewat git pull:

bash
git pull

Output yang Dihasilkan:

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

bash
git switch main

Output yang Dihasilkan:

text
Switched to branch 'main'
Your branch is up to date with 'origin/main'.
bash
git merge --no-ff fitur/laporan -m "Gabungkan fitur laporan harian"

Output yang Dihasilkan:

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

bash
git push

Output yang Dihasilkan:

text
To /home/z/my-project/tutorial-extracted/work/sandbox/proyek-git/proyek-03/kolaborasi-kas/budi/../pusat-kas.git
   c27773b..4d1472a  main -> main
bash
git push origin --delete fitur/laporan

Output yang Dihasilkan:

text
To /home/z/my-project/tutorial-extracted/work/sandbox/proyek-git/proyek-03/kolaborasi-kas/budi/../pusat-kas.git
 - [deleted]         fitur/laporan

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

bash
git branch -d fitur/laporan

Output yang Dihasilkan:

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

bash
git switch main

Output yang Dihasilkan:

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

bash
git pull

Output yang Dihasilkan:

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

bash
git fetch --prune

Output yang Dihasilkan:

text
From /home/z/my-project/tutorial-extracted/work/sandbox/proyek-git/proyek-03/kolaborasi-kas/siti/../pusat-kas
 - [deleted]         (none)     -> origin/fitur/laporan

Peta branch setelah pemangkasan:

bash
git branch -a

Output yang Dihasilkan:

text
  fitur/laporan
* main
  remotes/origin/HEAD -> origin/main
  remotes/origin/main

Sisi remotes/origin/ sudah bersih — hanya main tersisa. Branch lokal fitur/laporan milik Siti masih ada; salinan remote sudah tidak lagi menjadi alasan untuk mempertahankannya:

bash
git branch -d fitur/laporan

Output yang Dihasilkan:

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

bash
git log --oneline --graph --decorate

Output yang Dihasilkan:

text
*   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 v1

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

BagianPencapaianPerintah inti
Bagian 1pusat bare, dua clone, commit pertama menyebar ke rekangit init --bare, git clone, git push -u
Bagian 2siklus giliran push–fetch–merge–pull dengan bukti fetch tidak menggabungkangit fetch, git merge origin/main, git pull
Bagian 3push rejected direproduksi lalu dituntaskan lewat konflik dan merge commitgit push, git fetch, git add, git commit --no-edit
Bagian 4branch remote dikerjakan berdua, digabung --no-ff, dibersihkan totalgit 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:

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 .