gitfetchpullMenengah4 mnt baca

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:

bash
git fetch origin

Tidak ada output dramatis, tapi branch bayanganmu sekarang sudah update. Cek apa yang baru:

bash
git log --oneline main..origin/main
a1b2c3d (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:

bash
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:

bash
git merge origin/main
Updating 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

bash
git pull

Ini 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:

bash
git config --global pull.rebase true

Kapan pakai yang mana?

SituasiPerintah
Mau cek ada update apagit fetch + git log main..origin/main
Update cepat, repo sepi, yakin kecilgit pull
Update rapi tanpa merge commitgit pull --rebase
Sinkron banyak branch sekaligusgit 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.

bash
git pull   # langsung gas, semoga tidak konflik

Di 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.

bash
git fetch origin
git log --oneline main..origin/main   # ada apa sih?
git status                            # working dir-ku bersih?
git merge origin/main                 # oke, gabung sekarang

Butuh 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.