- Bab 4 dari 8
- 30 menit
- 4 soal kuis
Push, Pull, dan Sinkronisasi dengan GitHub
Di bab ini (10 bagian)
Tujuan bab ini
- Menghubungkan repo lokal ke repo kosong di GitHub dengan
git remote add origindangit push -u. - Menjalankan siklus harian add, commit, push tanpa bingung urutannya.
- Membedakan
git fetchdangit pull, lalu tahu kapan memakai masing-masing. - Membereskan push yang ditolak dengan pull dulu, baru push lagi.
Perjalanan sebuah perubahan sampai ke GitHub
Di kelas Git kamu sudah kenal tiga area kerja di laptop. Sekarang tambahkan satu tempat lagi, yaitu repo di GitHub:
- Working directory: folder tempat kamu mengedit file.
- Staging area: perubahan yang sudah kamu pilih untuk commit berikutnya (
git add). - Local repository: riwayat commit di folder
.gitdi laptopmu (git commit). - Remote repository: repo di server GitHub yang dibagikan ke tim (
git push).
Analogi gampangnya: working directory itu meja kerja, staging itu keranjang belanja, commit itu struk pembelian, dan GitHub itu lemari bersama yang bisa dibuka semua anggota tim. Selama belum di-push, commit kamu cuma ada di laptopmu dan rekan tim belum bisa melihatnya. Detail staging, restore, dan reset ada di kelas Git. Di sini kita fokus ke jalur laptop ↔ GitHub.
Menyambungkan repo lokal ke GitHub
Ada dua cara memulai:
- Repo sudah ada di GitHub (misalnya dibuat lewat tombol New dengan README): cukup
git clone <url>. Remote bernamaoriginotomatis terpasang. - Proyek sudah ada di laptop: buat repo baru di GitHub tanpa README,
.gitignore, atau lisensi supaya repo itu benar-benar kosong. GitHub lalu menampilkan petunjuk "…or push an existing repository from the command line". Isinya kurang lebih seperti ini:
git remote add origin <url>memberi nama pendekoriginuntuk alamat repo GitHub. Namaorigincuma kebiasaan umum.git branch -M mainmemastikan nama branch kamumain.git push -u origin mainmengirim branchmainkeorigin, dan opsi-u(--set-upstream) mencatat bahwamainlokal "mengikuti"origin/main.
Setelah -u dipasang sekali, push dan pull berikutnya cukup ditulis git push dan git pull tanpa argumen. Git juga jadi bisa memberi tahu posisimu di git status:
Cek alamat remote kapan saja dengan git remote -v. Kalau GitHub meminta login saat push, pakai Personal Access Token atau SSH seperti di bab autentikasi. Password akun GitHub biasa sudah tidak diterima untuk operasi Git.
Siklus harian: add, commit, push
Setiap kali menyelesaikan satu bagian kecil pekerjaan, kamu akan mengetik pola yang sama:
Setelah push, refresh halaman repo di GitHub dan commit kamu muncul di atas daftar file. Biasakan commit kecil dengan pesan yang jelas. Commit kecil lebih mudah di-review dan lebih jarang bikin konflik.
fetch vs pull
Dua perintah ini sama-sama mengambil data dari GitHub, tapi efeknya beda:
git fetch | git pull | |
|---|---|---|
| Mengunduh commit baru | Ya | Ya |
| Mengubah file di working directory | Tidak | Ya |
| Cocok untuk | mengintip dulu | langsung ikut terbaru |
git fetch hanya memperbarui remote-tracking branch seperti origin/main. File kerjamu tidak disentuh, jadi aman. Setelah fetch, git status bisa memberi tahu kamu tertinggal berapa commit:
Mau lihat dulu commit apa saja yang baru? Jalankan git log --oneline main..origin/main.
git pull adalah fetch yang langsung diikuti penggabungan ke branch kamu. Singkatnya: fetch itu "lihat dulu", pull itu "lihat sekaligus ambil".
Satu jebakan: git status tanpa fetch bisa bilang Your branch is up to date with 'origin/main' padahal teman sudah push. Itu karena Git membandingkan dengan origin/main versi terakhir yang ia tahu, bukan dengan GitHub saat ini.
Push ditolak? Pull dulu
Skenario klasik: kamu dan teman sama-sama mulai dari commit yang sama. Teman push duluan. Saat kamu push, GitHub menolak:
GitHub cuma menolak menimpa commit teman yang belum kamu punya. Solusinya: ambil dulu, gabungkan, lalu push lagi.
Kenapa ada --no-rebase? Di Git modern (termasuk 2.43), kalau riwayat lokal dan remote sudah bercabang dan kamu belum memilih caranya, git pull berhenti dengan pesan fatal: Need to specify how to reconcile divergent branches. Pilih sekali untuk selamanya dengan git config --global pull.rebase false (merge) atau true (rebase). Bedanya dibahas di kelas Git. Kalau pull ternyata memunculkan konflik, cara menyelesaikannya ada di bab berikutnya.
Satu hal yang jangan pernah jadi refleks: git push --force. Perintah ini menimpa riwayat di GitHub dan bisa menghapus commit teman.
Daftar perintah penting
| Perintah | Fungsi |
|---|---|
git clone <url> | menyalin repo dari GitHub beserta riwayatnya |
git remote -v | melihat alamat remote |
git remote add origin <url> | menyambungkan repo lokal ke GitHub |
git push -u origin <branch> | push pertama sekaligus memasang upstream |
git push | mengirim commit lokal ke GitHub |
git fetch | mengunduh info terbaru tanpa mengubah file |
git pull | fetch lalu menggabungkan ke branch aktif |
git status | posisi branch: ahead, behind, atau diverged |
git switch -c <nama> | membuat lalu pindah ke branch baru |
git stash | menyimpan sementara pekerjaan yang belum siap di-commit |
Kesalahan umum
- Membuat repo GitHub dengan README padahal proyek sudah ada di laptop. Push pertama langsung ditolak karena GitHub punya commit yang tidak kamu punya. Pull dulu (dengan
--allow-unrelated-historiesbila diminta), atau buat repo kosong. error: remote origin already exists.Remote dengan nama itu sudah terpasang. Ganti alamatnya dengangit remote set-url origin <url>.- Lupa push. Commit tersimpan di laptop, tapi teman tidak melihat apa-apa. Lihat
ahead of 'origin/main'digit status. - Percaya
up to datetanpa fetch. Jalankangit fetchdulu kalau mau tahu kondisi GitHub yang sebenarnya. - Menyelesaikan penolakan push dengan
--force. Pull dulu, baru push.
Coba sendiri
Simulasikan "GitHub" dengan repo bare di laptop, plus dua folder sebagai laptopmu dan laptop teman. Hash di laptopmu akan berbeda.
Sekarang jadilah teman: clone, commit, push.
Kembali ke laptopmu, commit sesuatu, lalu coba push:
Intip dulu, lalu gabungkan dan push:
Setelah itu, ulangi dengan repo sungguhan di GitHub.
Rangkuman
- Perubahan bergerak dari working directory ke staging, ke repo lokal, lalu ke GitHub lewat
git push. git remote add origin <url>dangit push -u origin maincukup dijalankan sekali. Setelah itu cukupgit pushdangit pull.git fetchhanya mengunduh dan memperbaruiorigin/main, sedangkangit pullsekaligus menggabungkan ke file kerjamu.- Push ditolak berarti GitHub punya commit yang belum kamu punya: pull dulu, selesaikan, lalu push lagi, jangan pakai
--force.
Slide 17 sampai 21 dari deck GitHub. Penjelasan lengkapnya ada di mode Baca.

Selesaikan bab ini
- 1. Baca materi
- 2. Kuis (4 soal)
Cek pemahaman
1Repo di-clone dari GitHub, lalu satu commit dibuat tanpa push. Apa baris kedua output `git status`?
git clone https://github.com/rina-dev/web.git cd web echo "<p>Kontak</p>" >> index.html git commit -am "Tambah kontak" git status2Perintah mana yang mengunduh commit baru dari GitHub tanpa mengubah file di working directory?
3Setelah `git push -u origin main` dijalankan sekali, push berikutnya dari branch main cukup ditulis `git push`.
4Push kamu ditolak dengan pesan `! [rejected] main -> main (fetch first)`. Apa langkah yang paling tepat?
