Review tidak berakhir di keputusan request changes — justru di situ pekerjaan kontributor dimulai lagi. Temuan Budi menempel di halaman pull request #8 menunggu jawaban, dan bagian ini menjalankan sisa siklusnya sampai bersih: Siti memperbaiki kelemahan lalu mengirimkannya sebagai commit baru, Budi menimbang ulang dan menyetujui, hasilnya digabungkan ke upstream bergaya platform, kedua meja dirapikan, lalu proyek kita tinjau sebagai satu cerita.

Membaca Temuan dari Meja Siti #

Siti masih di branch review/pencarian sejak push Bagian 2. Komentar Budi menempel pada src/feature.txt:13; perintah berikut mencetak baris ke-10 sampai ke-18 agar baris yang dituduh terlihat dengan konteksnya:

bash
sed -n '10,18p' src/feature.txt

Output yang Dihasilkan:

text
## Fungsi Pencarian

cari(kata_kunci):
    cocok = catatan yang memuat "belanja"
    kembalikan cocok

## Hasil Uji

cari("belanja") → catatan 3: daftar belanja mingguan

Potongan itu persis wilayah yang dikutip Budi: tanda tangan menerima kata_kunci, badannya memuat "belanja" — diagnosis sudah dibawa pulang; sisanya pekerjaan tangan.

Memperbaiki Hardcode #

Perbaikannya dua suntingan pada berkas: jadikan parameter benar-benar dibaca, lalu tambahkan bukti untuk kata kunci lain:

bash
sed -i 's/cocok = catatan yang memuat "belanja"/cocok = catatan yang memuat kata_kunci/' src/feature.txt
sed -i 's/^cari("belanja") → catatan 3: daftar belanja mingguan$/&\ncari("rendang") → catatan 2: resep rendang keluarga\ncari("git")     → catatan 1: belajar Git setiap pagi/' src/feature.txt

Sed pertama menukar kata yang di-hardcode menjadi nama parameter; sed kedua menyisipkan dua baris bukti di bawah baris uji belanja (& mempertahankan baris yang cocok, \n baris baru). Lihat hasil keseluruhan:

bash
cat src/feature.txt

Output yang Dihasilkan:

text
Fitur Pencarian Catatan
========================

## Data Catatan

- catatan 1: belajar Git setiap pagi
- catatan 2: resep rendang keluarga
- catatan 3: daftar belanja mingguan

## Fungsi Pencarian

cari(kata_kunci):
    cocok = catatan yang memuat kata_kunci
    kembalikan cocok

## Hasil Uji

cari("belanja") → catatan 3: daftar belanja mingguan
cari("rendang") → catatan 2: resep rendang keluarga
cari("git")     → catatan 1: belajar Git setiap pagi

Tiga kata kunci kini masing-masing mengembalikan catatan berbeda — janji deskripsi PR berbukti tiga kali. Sebelum mengirim, baca diff dengan mata reviewer; Budi akan membaca persis potret ini:

bash
git diff

Output yang Dihasilkan:

text
diff --git a/src/feature.txt b/src/feature.txt
index 3c16aef..5e95d6d 100644
--- a/src/feature.txt
+++ b/src/feature.txt
@@ -10,9 +10,11 @@ Fitur Pencarian Catatan
 ## Fungsi Pencarian
 
 cari(kata_kunci):
-    cocok = catatan yang memuat "belanja"
+    cocok = catatan yang memuat kata_kunci
     kembalikan cocok
 
 ## Hasil Uji
 
 cari("belanja") → catatan 3: daftar belanja mingguan
+cari("rendang") → catatan 2: resep rendang keluarga
+cari("git")     → catatan 1: belajar Git setiap pagi

Satu baris ditukar, dua baris ditambah — bentuk ideal jawaban atas review: kecil, tertuju pada temuan, membawa buktinya sendiri. Simpan sebagai satu commit berlabel fix: — jenis perbaikan pada Conventional Commits :

bash
git add src/feature.txt
git commit -m "fix: jadikan kata kunci parameter pencarian"

Output yang Dihasilkan:

text
[review/pencarian 1ee2814] fix: jadikan kata kunci parameter pencarian
 1 file changed, 3 insertions(+), 1 deletion(-)

Hash 1ee2814 akan berbeda di mesin kita. Pesannya menjelaskan apa yang dibereskan — bukan sekadar “perbaiki review”.

Dorong perbaikan ke fork:

bash
git push origin review/pencarian

Output yang Dihasilkan:

text
To ../fork-siti.git
   c17159e..1ee2814  review/pencarian -> review/pencarian

Tanpa -u — pelacakan sudah terpasang sejak Bagian 2, tinggal rentang pembaruannya: c17159e..1ee2814. Di platform nyata, push ini otomatis memperbarui halaman pull request yang sama dan memberi tahu Budi.

Menimbang Ulang dari Meja Budi #

Budi menarik pembaruan dari fork:

bash
cd ../budi
git fetch fork

Output yang Dihasilkan:

text
From ../fork-siti
   c17159e..1ee2814  review/pencarian -> fork/review/pencarian

Kerangka kandidat kini berbunyi:

bash
git log --oneline main..fork/review/pencarian

Output yang Dihasilkan:

text
1ee2814 fix: jadikan kata kunci parameter pencarian
c17159e feat: terapkan fungsi pencarian
84f5f89 feat: tulis kerangka fitur pencarian

Dua commit terbawah sudah ditinjau — yang baru hanya satu, dan review pun menjadi bertahap: Budi menimbang 1ee2814, lalu memastikan keseluruhan dengan potret akhir:

bash
git diff main..fork/review/pencarian

Output yang Dihasilkan:

text
diff --git a/src/feature.txt b/src/feature.txt
index 2586bd3..5e95d6d 100644
--- a/src/feature.txt
+++ b/src/feature.txt
@@ -6,3 +6,15 @@ Fitur Pencarian Catatan
 - catatan 1: belajar Git setiap pagi
 - catatan 2: resep rendang keluarga
 - catatan 3: daftar belanja mingguan
+
+## Fungsi Pencarian
+
+cari(kata_kunci):
+    cocok = catatan yang memuat kata_kunci
+    kembalikan cocok
+
+## Hasil Uji
+
+cari("belanja") → catatan 3: daftar belanja mingguan
+cari("rendang") → catatan 2: resep rendang keluarga
+cari("git")     → catatan 1: belajar Git setiap pagi

Hunk yang sama seperti putaran pertama — isinya kini menjawab temuan. Dua baris checklist yang dulu gagal ditimbang ulang:

AspekYang dibaca BudiPutusan
BenarBadan fungsi membaca kata_kunci; janji deskripsi PR — kata kunci apa pun — terpenuhi.Lolos
TerujiTiga kata kunci berbeda (belanja, rendang, git) dengan hasil masing-masing.Lolos

Tiga aspek lain lolos sejak putaran pertama dan tidak tersentuh diff — meninjau ulang hanya yang berubah jauh lebih murah. Budi menekan Approve: temuan ditandai selesai, dan pull request #8 kembali siap digabungkan.

Menggabungkan Bergaya Platform #

Tombol merge di platform memajukan main lewat merge commit — pesannya disusun dari nomor PR, pemilik fork, dan nama branch kandidatnya. Sandbox menirunya di clone Budi:

bash
git merge --no-ff fork/review/pencarian -m "Merge pull request #8 from siti/review/pencarian"

Output yang Dihasilkan:

text
Merge made by the 'ort' strategy.
 src/feature.txt | 12 ++++++++++++
 1 file changed, 12 insertions(+)

Opsi --no-ff memaksa gelembung merge meski fast-forward mungkin — main upstream belum bergerak sejak branch dibuka. Pesannya baku Merge pull request #8 from siti/review/pencarian: persis format tombol merge platform, sehingga riwayat lokal bentuknya sama dengan upstream sungguhan; pilihan metode merge platform dibedakan di panduan metode merge GitHub .

Publikasikan hasilnya ke repository asal:

bash
git push origin main

Output yang Dihasilkan:

text
To ../upstream-catatan.git
   e5c2aad..cd5dbe2  main -> main

Merge kini resmi di upstream — di platform nyata, pull request #8 seketika ditutup otomatis dengan status merged. Bentuk akhir riwayat dari meja Budi:

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

Output yang Dihasilkan:

text
*   cd5dbe2 (HEAD -> main, origin/main) Merge pull request #8 from siti/review/pencarian
|\  
| * 1ee2814 (fork/review/pencarian) fix: jadikan kata kunci parameter pencarian
| * c17159e feat: terapkan fungsi pencarian
| * 84f5f89 feat: tulis kerangka fitur pencarian
|/  
* e5c2aad (fork/main) Rintis proyek catatan

Lima commit dalam satu gelembung: rintisan Budi, tiga commit Siti, satu merge. Dekorasinya bicara: origin/main ikut cd5dbe2, tetapi fork/main masih di e5c2aad — fork belum diperbarui, dan tugas itu di meja Siti.

Siti menarik kabar dari repository asal:

bash
cd ../siti
git fetch upstream

Output yang Dihasilkan:

text
From ../upstream-catatan
 * [new branch]      main       -> upstream/main

Baris [new branch] muncul karena ini fetch pertama dari upstream — salinan upstream/main lahir membawa hasil merge. Pindah ke main:

bash
git switch main

Output yang Dihasilkan:

text
Switched to branch 'main'
Your branch is up to date with 'origin/main'.

Samakan main lokal dengan upstream:

bash
git merge --ff-only upstream/main

Output yang Dihasilkan:

text
Updating e5c2aad..cd5dbe2
Fast-forward
 src/feature.txt | 12 ++++++++++++
 1 file changed, 12 insertions(+)

Opsi --ff-only hanya mengizinkan maju cepat: salinan lokal menempel pada cd5dbe2 — hash persis hasil merge Budi — tanpa merge commit tambahan; sekaligus pengaman bila sejarah lokal ternyata bercabang.

Fork jangan dibiarkan tertinggal:

bash
git push origin main

Output yang Dihasilkan:

text
To ../fork-siti.git
   e5c2aad..cd5dbe2  main -> main

main fork kini sejajar dengan upstream — siap menjadi panggung pull request berikutnya. Tinggal satu pekerjaan: branch kandidat telah menyelesaikan tugasnya, jadi hapus salinannya:

bash
git branch -d review/pencarian

Output yang Dihasilkan:

text
Deleted branch review/pencarian (was 1ee2814).

Huruf kecil -d hanya lolos karena 1ee2814 sudah tergabung di main — perlindungannya dibedah di Menghapus Branch . Salinan di sisi server fork dihapus dengan satu perintah:

bash
git push origin --delete review/pencarian

Output yang Dihasilkan:

text
To ../fork-siti.git
 - [deleted]         review/pencarian

Graf akhir dari meja Siti:

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

Output yang Dihasilkan:

text
*   cd5dbe2 (HEAD -> main, upstream/main, origin/main, origin/HEAD) Merge pull request #8 from siti/review/pencarian
|\  
| * 1ee2814 fix: jadikan kata kunci parameter pencarian
| * c17159e feat: terapkan fungsi pencarian
| * 84f5f89 feat: tulis kerangka fitur pencarian
|/  
* e5c2aad Rintis proyek catatan

Empat penunjuk — main lokal, upstream/main, origin/main, origin/HEAD — berkumpul pada gelembung yang sama: meja Siti, repository asal, dan fork sejajar pada satu titik. Siklus tertutup.

Ringkasan Proyek #

Satu siklus penuh telah berputar dari kedua kursi: mengusulkan, menimbang, memperbaiki, menyetujui, lalu mendarat di upstream lewat satu gelembung merge. Ketiga berkas pendamping halaman ini menyimpan keadaan akhir upstream: src/feature.txt versi tiga-kata-kunci, README.md dan docs/review-checklist.md tak tersentuh sejak rintisan.

BagianPencapaianPerintah inti
Bagian 1panggung fork–upstream empat repositori; fitur pencarian dalam tiga commit — satu di antaranya menyimpan kelemahangit init --bare, git clone --bare, git switch -c
Bagian 2tiga commit dilipat menjadi dua; deskripsi PR ditulis; branch didorong ke fork; meja reviewer disiapkangit rebase -i (fixup), git push -u
Bagian 3review empat lapis dengan checklist; kelemahan ditemukan dari membaca diff; keputusan request changesgit log, git diff
Bagian 4perbaikan satu commit fix:; re-review; approve; merge --no-ff; branch dibersihkan totalgit commit -m "fix: …", git merge --no-ff, git push origin --delete

Konsep yang dipakai sepanjang proyek dan tempat mengulang teorinya:

Ritual gerbang review kini pegangan tangan kita — dan kelemahan yang lolos dari mata penulisnya ketemu justru dari kursi orang kedua. Namun gerbang menjaga kualitas, bukan keberuntungan: commit tertimpa, branch terhapus, berkas hilang tetap mungkin. Proyek berikutnya melatih juru selamatnya, memulihkan riwayat dari berbagai skenario kehilangan: Proyek 05: Pemulihan Riwayat .