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:
sed -n '10,18p' src/feature.txtOutput yang Dihasilkan:
## Fungsi Pencarian
cari(kata_kunci):
cocok = catatan yang memuat "belanja"
kembalikan cocok
## Hasil Uji
cari("belanja") → catatan 3: daftar belanja mingguanPotongan 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:
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.txtSed 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:
cat src/feature.txtOutput yang Dihasilkan:
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 pagiTiga 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:
git diffOutput yang Dihasilkan:
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 pagiSatu 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
:
git add src/feature.txt
git commit -m "fix: jadikan kata kunci parameter pencarian"Output yang Dihasilkan:
[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:
git push origin review/pencarianOutput yang Dihasilkan:
To ../fork-siti.git
c17159e..1ee2814 review/pencarian -> review/pencarianTanpa -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:
cd ../budi
git fetch forkOutput yang Dihasilkan:
From ../fork-siti
c17159e..1ee2814 review/pencarian -> fork/review/pencarianKerangka kandidat kini berbunyi:
git log --oneline main..fork/review/pencarianOutput yang Dihasilkan:
1ee2814 fix: jadikan kata kunci parameter pencarian
c17159e feat: terapkan fungsi pencarian
84f5f89 feat: tulis kerangka fitur pencarianDua commit terbawah sudah ditinjau — yang baru hanya satu, dan review pun menjadi bertahap: Budi menimbang 1ee2814, lalu memastikan keseluruhan dengan potret akhir:
git diff main..fork/review/pencarianOutput yang Dihasilkan:
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 pagiHunk yang sama seperti putaran pertama — isinya kini menjawab temuan. Dua baris checklist yang dulu gagal ditimbang ulang:
| Aspek | Yang dibaca Budi | Putusan |
|---|---|---|
| Benar | Badan fungsi membaca kata_kunci; janji deskripsi PR — kata kunci apa pun — terpenuhi. | Lolos |
| Teruji | Tiga 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:
git merge --no-ff fork/review/pencarian -m "Merge pull request #8 from siti/review/pencarian"Output yang Dihasilkan:
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:
git push origin mainOutput yang Dihasilkan:
To ../upstream-catatan.git
e5c2aad..cd5dbe2 main -> mainMerge kini resmi di upstream — di platform nyata, pull request #8 seketika ditutup otomatis dengan status merged. Bentuk akhir riwayat dari meja Budi:
git log --oneline --graph --decorateOutput yang Dihasilkan:
* 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 catatanLima 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.
Menutup Siklus di Meja Siti #
Siti menarik kabar dari repository asal:
cd ../siti
git fetch upstreamOutput yang Dihasilkan:
From ../upstream-catatan
* [new branch] main -> upstream/mainBaris [new branch] muncul karena ini fetch pertama dari upstream — salinan upstream/main lahir membawa hasil merge. Pindah ke main:
git switch mainOutput yang Dihasilkan:
Switched to branch 'main'
Your branch is up to date with 'origin/main'.Samakan main lokal dengan upstream:
git merge --ff-only upstream/mainOutput yang Dihasilkan:
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:
git push origin mainOutput yang Dihasilkan:
To ../fork-siti.git
e5c2aad..cd5dbe2 main -> mainmain fork kini sejajar dengan upstream — siap menjadi panggung pull request berikutnya. Tinggal satu pekerjaan: branch kandidat telah menyelesaikan tugasnya, jadi hapus salinannya:
git branch -d review/pencarianOutput yang Dihasilkan:
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:
git push origin --delete review/pencarianOutput yang Dihasilkan:
To ../fork-siti.git
- [deleted] review/pencarianGraf akhir dari meja Siti:
git log --oneline --graph --decorateOutput yang Dihasilkan:
* 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 catatanEmpat 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.
| Bagian | Pencapaian | Perintah inti |
|---|---|---|
| Bagian 1 | panggung fork–upstream empat repositori; fitur pencarian dalam tiga commit — satu di antaranya menyimpan kelemahan | git init --bare, git clone --bare, git switch -c |
| Bagian 2 | tiga commit dilipat menjadi dua; deskripsi PR ditulis; branch didorong ke fork; meja reviewer disiapkan | git rebase -i (fixup), git push -u |
| Bagian 3 | review empat lapis dengan checklist; kelemahan ditemukan dari membaca diff; keputusan request changes | git log, git diff |
| Bagian 4 | perbaikan satu commit fix:; re-review; approve; merge --no-ff; branch dibersihkan total | git commit -m "fix: …", git merge --no-ff, git push origin --delete |
Konsep yang dipakai sepanjang proyek dan tempat mengulang teorinya:
- siklus review dari kedua kursi — Code Review ;
- pesan commit
feat:danfix:— Conventional Commits ; - model fork dengan dua remote dalam satu clone — Fork dan Upstream ;
- gelembung merge dan opsi
--no-ff— git merge .
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 .