fetch vs pull: Ambil Dulu atau Langsung Gabung?
Bedakan git fetch dan git pull, dan kenapa fetch dulu lebih aman.
Kenapa ada dua perintah yang mirip?
Bayangkan kamu kerja kelompok bikin web. Temanmu push 5 commit baru ke GitHub tadi malam. Pagi ini kamu buka laptop dan pengin kodemu ikut update. Nah, Git kasih dua cara: git fetch dan git pull.
Bedanya gini. git fetch itu kayak ngintip paket dari jendela: paketnya di-download dan ditaruh di gudang (branch bayangan seperti origin/main), tapi kamu BELUM buka dan BELUM campur ke barang-barangmu. Nol risiko, bisa dijalankan kapan pun. git pull itu paketnya langsung dibuka dan dicampur ke barangmu saat itu juga, tanpa kamu lihat dulu isinya apa.
Kenapa dua-duanya ada? Karena kebutuhanmu beda-beda. Kadang kamu cuma mau tahu "ada update apa sih?" tanpa komitmen apa-apa. Kadang kamu buru-buru dan yakin update-nya kecil. Fetch itu buat yang hati-hati, pull buat yang santai. Developer profesional biasanya fetch dulu, intip isinya, baru gabung kalau sudah yakin.
Contoh 1: fetch, intip, baru gabung
Langkah pertama, download semua perubahan remote tanpa menyentuh branch kerjamu:
git fetch originTidak ada output dramatis, tapi branch bayanganmu sekarang sudah update. Cek apa yang baru:
git log --oneline main..origin/maina1b2c3d (origin/main) Tambah validasi form login
e4f5a6b Perbaiki typo di README
Dua commit baru di remote (output kosong berarti sudah up to date). Cek seberapa besar perubahannya:
git diff main..origin/main --stat src/login.js | 24 ++++++++++++++++--------
README.md | 2 +-
2 files changed, 18 insertions(+), 8 deletions(-)
Kecil dan aman. Gabung sekarang:
git merge origin/mainUpdating d7c8e9f..a1b2c3d
Fast-forward
src/login.js | 24 ++++++++++++++++--------
README.md | 2 +-
2 files changed, 18 insertions(+), 8 deletions(-)
Tidak ada kejutan: kamu sudah tahu isinya duluan. Inilah alur profesional.
Contoh 2: pull yang praktis tapi buta
git pullIni singkatan dari git fetch + git merge origin/main. Kalau beruntung outputnya mulus; kalau apes:
Auto-merging src/login.js
CONFLICT (content): Merge conflict in src/login.js
Automatic merge failed; fix conflicts and then commit the result.
Kamu tiba-tiba terjebak di tengah merge tanpa persiapan. Konfliknya sih sama saja kalau kamu fetch dulu, tapi bedanya kamu sudah tahu bakal ada konflik dan bisa atur waktu buat beresin, bukan kaget di tengah jalan.
Ada versi pull yang lebih rapi: git pull --rebase. Langkah keduanya jadi rebase, bukan merge, sehingga riwayat tetap linear tanpa commit "Merge branch 'main'..." yang berisik. Banyak developer menjadikannya default:
git config --global pull.rebase trueKapan pakai yang mana?
| Situasi | Perintah |
|---|---|
| Mau cek ada update apa | git fetch + git log main..origin/main |
| Update cepat, repo sepi, yakin kecil | git pull |
| Update rapi tanpa merge commit | git pull --rebase |
| Sinkron banyak branch sekaligus | git fetch --all --prune |
Flag --prune menghapus branch bayangan lokal yang sudah dihapus di remote, supaya git branch -r tidak penuh sampah.
Kesalahan umum pemula
SALAH: pull buta tiap pagi tanpa lihat dulu.
git pull # langsung gas, semoga tidak konflikDi repo tim yang aktif, kebiasaan ini bikin kamu kaget konflik jam 8 pagi. Lebih parah: kalau working dir-mu kotor, pull bisa gagal total.
BENAR: fetch dulu, intip, baru gabung.
git fetch origin
git log --oneline main..origin/main # ada apa sih?
git status # working dir-ku bersih?
git merge origin/main # oke, gabung sekarangButuh 10 detik ekstra, tapi kamu selalu tahu apa yang masuk ke kodemu. Kebiasaan kecil, efeknya besar.
Tantangan
Intip sebelum gabung
Di repo yang terhubung ke GitHub: buat 1 commit LANGSUNG di GitHub web (edit file via browser). Di lokal JANGAN pull dulu; jalankan git fetch, lalu git log --oneline main..origin/main. Tulis commit apa yang terlihat, BARU lakukan merge manual.