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:
git statusOutput yang Dihasilkan:
On branch main
Your branch is up to date with 'origin/main'.
nothing to commit, working tree cleanLaporan 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:
git pull --rebase origin mainOutput yang Dihasilkan:
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.mdTiga 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:
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:
git pull --rebaseOutput yang Dihasilkan:
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 hargaSiti 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:
cat README.mdOutput yang Dihasilkan:
# 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:
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 --continueOutput yang Dihasilkan (perintah terakhir):
[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:
git pushOutput yang Dihasilkan:
To /home/z/my-project/tutorial-extracted/work/sandbox/remote-repository/part-b/latihan-rutinitas/proyek-utama.git
c917da5..22f95dd main -> maingit log --oneline --graphOutput yang Dihasilkan:
* 22f95dd Tambah daftar harga
* c917da5 Tambah catatan stok
* 6d4eeff Tambah halaman kontak
* 0ecdbab Perluas daftar produk
* 1c3aadd Buat README tokoLima 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:
| Momen | Perintah | Tujuan |
|---|---|---|
| Mulai hari kerja | git status lalu git pull --rebase | mulai dari keadaan terkini |
| Setiap 1-2 jam kerja | git fetch | memantau perkembangan tanpa menggabungkan |
| Sebelum push | git pull --rebase | pastikan tidak menimpa pekerjaan rekan |
| Sebelum meminta review | git push setelah pull | reviewer melihat versi final kita |
| Akhir hari | commit lalu git push | pekerjaan aman di remote, bisa dilanjutkan dari mana saja |
| Akan lama tidak menyentuh | git fetch --prune saat kembali | sapu 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.