gitpushpullfetchgithubMenengah3 mnt baca

Push, Pull, dan Fetch: Sinkronisasi dengan Remote

Cara mengirim commit ke GitHub, mengambil update terbaru, dan beda penting antara pull dan fetch.

Tiga perintah sinkronisasi

Setelah remote terhubung, ada tiga perintah untuk menyamakan repo lokal dan remote:

  • git push: kirim commit lokal ke remote.
  • git pull: ambil commit dari remote dan gabungkan ke branch lokal.
  • git fetch: ambil commit dari remote tanpa menggabungkan.

git push: upload karyamu

bash
# push pertama kali: -u menyimpan pasangan branch lokal <-> remote
git push -u origin main
bash
Enumerating objects: 5, done.
Writing objects: 100% (5/5), done.
To https://github.com/username/proyek-ku.git
 * [new branch]      main -> main
branch 'main' set up to track 'origin/main'.

Flag -u (singkatan --set-upstream) hanya perlu sekali. Setelah itu, cukup:

bash
git push

Git sudah ingat pasangan branch-nya. Kapan dipakai? Setiap kali kamu punya commit baru yang ingin dibagikan: ke GitHub untuk backup, atau supaya tim bisa melihat dan me-review.

git pull: ambil update terbaru

bash
git pull
bash
Updating 3f2a1b9..9d8e7f6
Fast-forward
 kontak.html | 10 ++++++++++
 1 file changed, 10 insertions(+)

Kapan dipakai? Sebelum mulai kerja (pastikan kamu mulai dari versi terbaru) dan sebelum push (kalau ada yang push duluan, kamu harus pull dulu). Kebiasaan "pull dulu baru kerja" mencegah banyak masalah.

git fetch vs git pull: bedanya penting

Ini konsep yang sering membingungkan:

  • git fetch mengunduh semua commit baru dari remote ke repo lokalmu, tapi tidak mengubah file kerjamu sama sekali. Ia hanya memperbarui "pengetahuan" Git tentang kondisi remote (misalnya penanda origin/main).
  • git pull = git fetch + git merge. Mengunduh dan langsung menggabungkan ke branch aktifmu.

Kapan pakai fetch? Saat kamu ingin melihat dulu apa yang berubah di remote sebelum menggabungkannya. Contoh alur aman:

bash
git fetch
git log --oneline main..origin/main

Perintah kedua menampilkan commit apa saja yang ada di remote tapi belum ada di lokalmu. Kalau terlihat aman, baru merge manual:

bash
git merge origin/main

Alur ini memberi kamu kendali penuh, sedangkan git pull langsung menggabungkan tanpa bertanya.

Skenario umum: push ditolak

bash
git push
bash
! [rejected]  main -> main (fetch first)
error: failed to push some refs
hint: Updates were rejected because the remote contains work that you do
hint: not have locally.

Artinya: seseorang (atau kamu dari komputer lain) sudah push duluan. Solusinya bukan paksa, tapi sinkron dulu:

bash
git pull
# selesaikan kalau ada conflict, lalu
git push

Catatan teknis: git push --force menimpa riwayat di remote dengan versimu, menghapus commit orang lain yang tidak kamu punya. Di branch pribadi yang tidak dipakai siapa pun, kadang bisa diterima. Di branch bersama seperti main, ini dilarang keras dan bisa merusak kerjaan tim. Kalau kamu tergoda memakai --force, berhenti dan tanyakan dulu ke tim. Hampir selalu ada cara yang lebih aman (pull, resolve, push).

Ringkasan

PerintahArahEfek ke file kerja
git pushlokal ke remotetidak ada
git pullremote ke lokallangsung digabung
git fetchremote ke lokaltidak digabung, aman untuk intip dulu

Pakai -u sekali di push pertama. Biasakan pull sebelum mulai kerja. Dan jauhi push --force di branch bersama.