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
# push pertama kali: -u menyimpan pasangan branch lokal <-> remote
git push -u origin mainEnumerating 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:
git pushGit 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
git pullUpdating 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 fetchmengunduh semua commit baru dari remote ke repo lokalmu, tapi tidak mengubah file kerjamu sama sekali. Ia hanya memperbarui "pengetahuan" Git tentang kondisi remote (misalnya penandaorigin/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:
git fetch
git log --oneline main..origin/mainPerintah kedua menampilkan commit apa saja yang ada di remote tapi belum ada di lokalmu. Kalau terlihat aman, baru merge manual:
git merge origin/mainAlur ini memberi kamu kendali penuh, sedangkan git pull langsung menggabungkan tanpa bertanya.
Skenario umum: push ditolak
git push! [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:
git pull
# selesaikan kalau ada conflict, lalu
git pushCatatan teknis:
git push --forcemenimpa 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 sepertimain, 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
| Perintah | Arah | Efek ke file kerja |
|---|---|---|
git push | lokal ke remote | tidak ada |
git pull | remote ke lokal | langsung digabung |
git fetch | remote ke lokal | tidak digabung, aman untuk intip dulu |
Pakai -u sekali di push pertama. Biasakan pull sebelum mulai kerja. Dan jauhi push --force di branch bersama.