Semua alat pertukaran sudah terkumpul: fetch untuk melihat, pull untuk mengambil dan menggabungkan, push untuk mengirim, dan dua bab penolakan beserta penyelesaiannya. Yang membedakan kolaborator yang menyenangkan dari yang menyusahkan bukan lagi penguasaan alat, melainkan iramanya: seberapa sering dan dalam urutan apa alat-alat itu dipakai. Chapter ini merangkai satu sesi kerja utuh dari pagi hingga push — lengkap dengan konflik kecil di tengah jalan — lalu menutupnya dengan etika dan tabel irama sinkronisasi.

Sesi Lengkap dari Pagi hingga Push #

Panggungnya pola lama: bare repository proyek-utama.git berisi dua commit dasar, Budi dan Siti berdua meng-clone. Semalam sebelum Budi pulang, Siti menyelesaikan halaman kontak dan mengirimkannya — remote diam-diam maju satu commit. Pagi datang. Kebiasaan pertama Budi bukan langsung mengetik kode, melainkan memeriksa keadaan:

bash
git status

Output yang Dihasilkan:

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

nothing to commit, working tree clean

Laporan ini nyaman — dan jangan terlena: up to date hanya berarti sejauh pengetahuan lokal Git, seperti dibuktikan di chapter Remote-Tracking Branch . Remote bisa saja sudah bergerak semalaman. Karena itu pemeriksaan langsung disusul penarikan dengan rebase:

bash
git pull --rebase origin main

Output yang Dihasilkan:

text
From /home/z/my-project/tutorial-extracted/work/sandbox/remote-repository/part-b/latihan-rutinitas/proyek-utama
 * branch            main       -> FETCH_HEAD
   0ecdbab..6d4eeff  main       -> origin/main
Updating 0ecdbab..6d4eeff
Fast-forward
 kontak.md | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 kontak.md

Tiga babak dalam satu keluaran: fetch membawa kabar semalam (0ecdbab..6d4eeff), FETCH_HEAD menampung snapshot cabang yang diminta, dan main lokal dimajukan dengan Fast-forward — komitmen Siti kini ada di meja Budi. Barulah Budi bekerja: daftar harga ditambahkan ke README.md dan di-commit seperti biasa:

bash
printf '# Toko Budi\n\n## Produk\n- kopi\n- gula\n\n## Harga\n- kopi 20000\n' > README.md
git add README.md
git commit -m "Tambah daftar harga"

Konflik Kecil di Tengah Sesi #

Siang menjelang; sebelum push, kebiasaan kedua dijalankan — tarik dulu:

bash
git pull --rebase

Output yang Dihasilkan:

text
From /home/z/my-project/tutorial-extracted/work/sandbox/remote-repository/part-b/latihan-rutinitas/proyek-utama
   6d4eeff..c917da5  main       -> origin/main
Auto-merging README.md
CONFLICT (content): Merge conflict in README.md
error: could not apply 13081bc... Tambah daftar harga
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
hint: Disable this message with "git config advice.mergeConflict false"
Could not apply 13081bc... Tambah daftar harga

Siti ternyata baru saja mengirim catatan stok — pada berkas yang sama. Fetch-nya sukses, rebase-nya terhenti: CONFLICT (content): Merge conflict in README.md dengan hint yang menuntun tiga langkah penyelesaian. Isi berkasnya:

bash
cat README.md

Output yang Dihasilkan:

text
# Toko Budi

## Produk
- kopi
- gula

<<<<<<< HEAD
## Stok
- kopi 12 kg
=======
## Harga
- kopi 20000
>>>>>>> 13081bc (Tambah daftar harga)

Blok konfliknya kecil dan mudah dibaca: sisi HEAD memuat catatan stok Siti, sisi bawah memuat daftar harga Budi — dua suntingan di tempat yang sama, keduanya layak hidup. Budi menyunting berkasnya menjadi gabungan kedua bagian, menandainya selesai, lalu melanjutkan rebase:

bash
printf '# Toko Budi\n\n## Produk\n- kopi\n- gula\n\n## Stok\n- kopi 12 kg\n\n## Harga\n- kopi 20000\n' > README.md
git add README.md
git rebase --continue

Output yang Dihasilkan (perintah terakhir):

text
[detached HEAD 22f95dd] Tambah daftar harga
 1 file changed, 3 insertions(+)
Successfully rebased and updated refs/heads/main.

Git membuka editor untuk mengonfirmasi pesan commit Tambah daftar harga — kita simpan tanpa perubahan. Baris [detached HEAD 22f95dd] adalah sementara saja: selama rebase, commit disusun ulang di HEAD terlepas sebelum ditempelkan kembali ke main — lalu Successfully rebased and updated menutupnya. Penanganan konflik yang lengkap — strategi ours/theirs, mergetool, hingga pembatalan — dibedah tuntas di chapter Menyelesaikan Merge Conflicts . Sesi ditutup dengan push yang kini dipastikan mulus:

bash
git push

Output yang Dihasilkan:

text
To /home/z/my-project/tutorial-extracted/work/sandbox/remote-repository/part-b/latihan-rutinitas/proyek-utama.git
   c917da5..22f95dd  main -> main
bash
git log --oneline --graph

Output yang Dihasilkan:

text
* 22f95dd Tambah daftar harga
* c917da5 Tambah catatan stok
* 6d4eeff Tambah halaman kontak
* 0ecdbab Perluas daftar produk
* 1c3aadd Buat README toko

Lima commit, satu garis lurus: pull --rebase menjaga riwayat tetap linear tanpa commit merge rutinitas — pekerjaan Siti dan Budi bergantian rapi seolah dikerjakan berurutan.

Etika Kolaborasi: Tarik Sebelum Dorong #

Mengapa urutannya selalu pull dulu, push kemudian? Alasan teknisnya sudah kita alami: push tanpa menarik berujung penolakan fetch first di chapter Push Rejected . Alasan sosialnya lebih dalam — setiap penolakan yang kita cegah berarti kita tidak pernah memaksa rekan menunggu kita berdamai sendirian, dan riwayat bersama tetap mudah dibaca semua orang. Anggota tim yang hanya mendorong adalah tamu yang datang membawa koper tanpa pernah membuka pintu untuk orang lain.

Irama Sinkronisasi #

Tidak semua momen menuntut ritual sama. Tabel ini memetakan frekuensi yang sehat per aktivitas:

MomenPerintahTujuan
Mulai hari kerjagit status lalu git pull --rebasemulai dari keadaan terkini
Setiap 1-2 jam kerjagit fetchmemantau perkembangan tanpa menggabungkan
Sebelum pushgit pull --rebasepastikan tidak menimpa pekerjaan rekan
Sebelum meminta reviewgit push setelah pullreviewer melihat versi final kita
Akhir haricommit lalu git pushpekerjaan aman di remote, bisa dilanjutkan dari mana saja
Akan lama tidak menyentuhgit fetch --prune saat kembalisapu referensi usang sekaligus

Irama seperti ini membuat remote benar-benar menjadi titik temu: pekerjaan mengalir keluar-masuk dalam potongan kecil, konflik ketemu saat masih kecil, dan tidak ada yang menumpuk. Ragam kombinasi harian lainnya — termasuk pola pull --ff-only untuk kolaborator yang ingin berhenti sebelum divergen — dirinci di dokumentasi git pull dan panduan giteveryday . Konsekuensi alaminya: branch fitur yang rajin dikirim akan cepat selesai dan tergabung — lalu menjadi barang bekas yang menuntut perapian. Chapter berikutnya mengurus akhir hayati sebuah branch: menghapusnya dari remote dengan benar.