Push, Pull & Fetch

Push, Pull & Fetch 🔄

Tiga perintah ini adalah cara Git menyinkronkan data antara repositori lokal dan remote. Memahami perbedaannya sangat penting untuk kolaborasi tim.


git push — Kirim ke Remote

Mengirim commit dari repositori lokal ke remote:

# Push branch aktif ke remote (setelah -u diset)
git push

# Push branch tertentu ke remote
git push origin main

# Push dan set upstream (pertama kali push branch baru)
git push -u origin feature/navbar
# -u = --set-upstream: menghubungkan branch lokal ke remote
# Setelah ini, cukup ketik 'git push' saja

# Push semua branch sekaligus
git push --all origin

# Push tags ke remote
git push origin --tags

Apa yang terjadi di balik layar:

Lokal:   A ← B ← C ← D (main)
                       ↓ git push
Remote:  A ← B ← C ← D (main)

git fetch — Unduh Info dari Remote

Mengunduh perubahan dari remote tanpa menggabungkan ke working tree. Git hanya memperbarui informasi tentang kondisi remote:

# Fetch dari remote default (origin)
git fetch

# Fetch dari remote tertentu
git fetch origin

# Fetch semua remote
git fetch --all

Setelah fetch, perubahan ada di origin/main (remote tracking branch) tapi belum di main (branch lokal):

# Lihat perbedaan antara lokal dan remote setelah fetch
git log main..origin/main
git diff main origin/main

# Baru gabungkan manual jika sudah siap
git merge origin/main

git pull — Unduh & Gabungkan

git pull adalah kombinasi git fetch + git merge dalam satu perintah:

# Pull dari remote dan merge ke branch aktif
git pull

# Pull dari remote dan branch tertentu
git pull origin main

# Pull dengan rebase alih-alih merge
git pull --rebase
git pull -r
git pull = git fetch + git merge

Remote: A ← B ← C ← D ← E
Lokal:  A ← B ← C (belum ada D dan E)

Setelah git pull:
Lokal:  A ← B ← C ← D ← E

Fetch vs Pull — Kapan Pakai Yang Mana?

git fetch:
✓ Aman — tidak mengubah working tree
✓ Bisa cek perubahan dulu sebelum merge
✓ Cocok jika ingin kontrol penuh
✗ Perlu merge manual setelahnya

git pull:
✓ Praktis — satu perintah selesai
✗ Langsung merge tanpa preview
✗ Bisa mengejutkan jika ada konflik

Rekomendasi: gunakan git fetch lalu git log untuk cek perubahan, baru git merge jika aman.


Alur Kerja Tim yang Umum

# Pagi: ambil perubahan terbaru dari tim
git fetch origin
git log main..origin/main  # lihat apa yang berubah
git pull                    # gabungkan

# Kerjakan tugas
git switch -c feature/fitur-baru
# ... edit, add, commit ...

# Sebelum push, ambil perubahan terbaru
git fetch origin
git rebase origin/main  # taruh commit kita di atas yang terbaru

# Push
git push -u origin feature/fitur-baru

Menangani Rejected Push

Jika push ditolak karena remote lebih maju:

git push origin main
# Error: ! [rejected] main -> main (fetch first)
# hint: Updates were rejected because the remote contains work
# hint: that you do not have locally.

# Solusi: pull dulu, selesaikan konflik, baru push
git pull
# ... selesaikan konflik jika ada ...
git push origin main

Tracking Branch

# Lihat hubungan branch lokal dengan remote
git branch -vv
# Output:
# * main    a3f5c2b [origin/main] Tambah halaman kontak
#   feature 7b2e9f1 [origin/feature] Tambah fitur baru

# Set upstream branch secara manual
git branch --set-upstream-to=origin/main main

💡 Tips: Selalu git pull atau git fetch terlebih dahulu sebelum mulai bekerja setiap hari. Ini memastikan kamu bekerja di atas kode yang paling baru dan meminimalkan konflik saat push nanti. Seperti membaca email pagi hari sebelum membalas! 📬

Sebelumnya

Informasi Kursus

Kursus

Git Dasar

Kategori

Repository Remote

Durasi Pelajaran

20 menit

Pelajaran dalam Kategori Ini