Riwayat sudah menyebar, tetapi kolaborasi belum benar-benar terjadi — selama ini hanya Budi yang bekerja. Bagian ini menghidupkan siklusnya: Siti menambah fitur daftar transaksi dan mengirimkannya ke pusat, Budi menariknya dalam dua langkah terpisah supaya terlihat jelas apa yang sebenarnya dilakukan git fetch, lalu giliran berganti ke Budi dan Siti menarik hasil kerjanya. Di akhir bagian, siklus giliran ini tinggal diulang-ulang sampai proyek selesai.

Giliran Siti: Fitur Transaksi #

Pastikan terminal berada di siti/kas — clone Siti. Fitur barunya adalah seksi ## Transaksi berisi dua entri contoh, ditambah dokumentasi singkat ## Cara Pakai pada README:

bash
printf '\n## Transaksi\n\n- 2026-11-16 — Penjualan pagi: Rp45.000\n- 2026-11-16 — Beli bahan: Rp12.000\n' >> src/app.txt
printf '\n## Cara Pakai\n\nTambahkan baris transaksi pada `src/app.txt` dengan format\ntanggal — keterangan: jumlah.\n' >> README.md
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

Fitur dan dokumentasinya adalah satu satuan kerja, jadi keduanya masuk satu commit. Commit Siti memakai identitas yang disuntik lewat -c — mekanisme satu-mesin-dua-peran yang dijelaskan pada Bagian 1:

bash
git add .
git -c user.name="Siti Rahma" -c user.email="[email protected]" commit -m "Tambah daftar transaksi harian"

Output yang Dihasilkan:

text
[main 33144cd] Tambah daftar transaksi harian
 2 files changed, 10 insertions(+)

Kemudian kirim pekerjaannya ke pusat. Clone hasil git clone sudah membawa ikatan upstream, jadi git push polos cukup:

bash
git push

Output yang Dihasilkan:

text
To /home/z/my-project/tutorial-extracted/work/sandbox/proyek-git/proyek-03/kolaborasi-kas/siti/../pusat-kas.git
   03322c3..33144cd  main -> main

Baris 03322c3..33144cd main -> main membaca rentang perpindahan: main di pusat maju dari commit 03322c3 milik Budi ke commit 33144cd milik Siti. Pekerjaan Siti kini menunggu di titik temu.

Budi Menarik Tanpa Menggabungkan #

Giliran penerima: Budi. Pindah ke budi/kas, lalu tarik kabar terbaru dari pusat dengan git fetch:

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
   03322c3..33144cd  main       -> origin/main

Perhatikan kolom kanan: yang diperbarui hanyalah origin/main — salinan penunjuk pusat di dalam clone Budi, yang dibedah tuntas di Remote-Tracking Branch . Kata main di baris itu milik sisi remote; branch main lokal sama sekali tidak tersentuh. Tiga pemeriksaan berikut membuktikannya:

bash
git status

Output yang Dihasilkan:

text
On branch main
Your branch is behind 'origin/main' by 1 commit, and can be fast-forwarded.
  (use "git pull" to update your local branch)

nothing to commit, working tree clean
bash
cat src/app.txt

Output yang Dihasilkan:

text
Aplikasi Kas v1
===============

Catat pemasukan dan pengeluaran warung setiap hari.
bash
git log --oneline main..origin/main

Output yang Dihasilkan:

text
33144cd Tambah daftar transaksi harian

Tiga bukti saling menguatkan: git status melaporkan main lokal tertinggal satu commit dari origin/main; src/app.txt di working tree masih versi lama tanpa seksi Transaksi; dan rentang main..origin/main memuat tepat satu commit yang belum Budi miliki — milik Siti. Inilah batas kerja git fetch: menyalin commit dan memutakhirkan salinan penunjuk, tanpa menggabungkan apa pun.

Menggabungkan Pekerjaan Siti #

Barulah setelah melihat, Budi menggabungkan salinan pusat ke branch lokalnya:

bash
git merge origin/main

Output yang Dihasilkan:

text
Updating 03322c3..33144cd
Fast-forward
 README.md   | 5 +++++
 src/app.txt | 5 +++++
 2 files changed, 10 insertions(+)

Karena main lokal Budi tidak memuat commit lain di samping jalur Siti, penggabungan berlangsung sebagai fast-forward: penunjuk main cukup digeser maju ke 33144cd tanpa commit baru — bentuk penggabungan yang dibahas di Fast-Forward Merge . Verifikasi isi berkasnya:

bash
cat src/app.txt

Output yang Dihasilkan:

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

Fitur Siti kini hidup di clone Budi. Dua langkah fetch + merge ini boleh diringkas menjadi satu git pull — perilaku keduanya dibandingkan di git pull . Proyek ini memakai bentuk dua langkah pada giliran Budi agar mekanismenya terlihat, dan bentuk satu langkah pada giliran berikutnya.

Giliran Budi dan Pull Siti #

Giliran berganti. Budi menambah daftar kontributor pada README — dokumentasi kecil yang mencatat siapa mengerjakan apa:

bash
printf '\n## Kontributor\n\n- Budi Santoso — perintis aplikasi\n- Siti Rahma — fitur transaksi\n' >> README.md
git add README.md
git commit -m "Tambah daftar kontributor"

Output yang Dihasilkan (perintah git commit):

text
[main ae8e469] Tambah daftar kontributor
 1 file changed, 5 insertions(+)

Push Budi berhasil tanpa hambatan karena pusat belum bergerak sejak terakhir ia sinkron:

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
   33144cd..ae8e469  main -> main

Sekarang Siti yang menarik — kali ini dengan git pull satu langkah, dari siti/kas:

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
   33144cd..ae8e469  main       -> origin/main
Updating 33144cd..ae8e469
Fast-forward
 README.md | 5 +++++
 1 file changed, 5 insertions(+)

Keluaran pull menampilkan dua tahapnya sekaligus: blok From ... adalah fetch yang memajukan origin/main, blok Updating ... Fast-forward adalah merge yang menggeser main lokal Siti. Kedua clone dan pusat kini kembali sejajar di commit ae8e469.

Siklus Giliran #

Seluruh bagian ini sesungguhnya hanya satu pola yang diulang. Siklus giliran kolaborasi lewat satu pusat:

LangkahPerintahYang terjadi di clone
1. Kerjakansunting berkas, git add, git commitperubahan tercatat sebagai commit lokal
2. Tarikgit fetch origin, lalu git merge origin/maincommit rekan masuk ke branch lokal
3. Kirimgit pushcommit lokal naik ke pusat
4. Bergiliran—rekan memulai lagi dari langkah 1

Siklus ini mulus selama setiap orang menarik sebelum mengirim. Bagian berikutnya sengaja melanggar aturan itu — keduanya commit dari titik yang sama, Budi push lebih dulu, dan push Siti ditolak mentah-mentah oleh pusat: Bagian 3: Mengatasi Push Rejected .