git push & Upstream Tracking
Mengirim commit ke remote, memahami -u, dan membaca output push.
Push pertama dan arti -u
git push -u origin mainPerintah ini mengirim commit-commit branch main lokalmu ke remote origin. Flag -u (kependekan --set-upstream) memberi tahu Git: "branch lokal main ini pasangannya branch main di origin". Setelah itu, cukup ketik git push saja, Git sudah tahu tujuannya.
KENAPA -u ada? Karena Git tidak mau menebak-nebak tujuan push-mu. Tanpa pasangan upstream yang tercatat, git push polos akan bingung: "mau kirim ke remote mana, branch apa?" Flag -u mencatat jawabannya sekali, permanen, di konfigurasi lokalmu. KAPAN dipakai? Sekali per branch, di push pertamanya. Push-push berikutnya cukup git push.
Membaca output push
Contoh 1: push pertama ke repo kosong.
git push -u origin mainEnumerating objects: 5, done.
Counting objects: 100% (5/5), done.
To https://github.com/kamu/repo.git
* [new branch] main -> main
Branch 'main' set up to track 'origin/main'.Cara bacanya: Git menghitung objek baru, mengompres, mengirim, lalu remote mengonfirmasi. [new branch] berarti branch itu baru dibuat di remote. Baris terakhir adalah bukti -u bekerja: branch lokalmu sekarang "track" branch remote. KAPAN skill membaca output ini dipakai? Saat push gagal atau berperilaku aneh, output inilah petunjuk pertamanya, jangan langsung panik.
Push branch fitur: alur harian
Contoh 2: pola yang sama untuk branch apa pun.
git switch -c fitur-baru
# ... kerja, commit ...
git push -u origin fitur-baru * [new branch] fitur-baru -> fitur-baru
Branch 'fitur-baru' set up to track 'origin/fitur-baru'.Setelah -u sekali, push berikutnya cukup git push. Ini alur harianmu: branch, commit, push, buka Pull Request. KAPAN dipakai? Setiap hari kerja, berkali-kali. Inilah perintah Git yang paling sering kamu ketik setelah git status.
Kapan push ditolak (dan cara benar mengatasinya)
Contoh 3: teman push duluan saat kamu kerja.
git push! [rejected] main -> main (fetch first)
error: failed to push some refsArtinya remote punya commit yang belum kamu miliki. KENAPA Git menolak? Karena push yang "menimpa" akan menghapus commit temanmu dari remote tanpa jejak. Penolakan ini adalah fitur keselamatan, bukan bug.
SALAH: memaksa dengan --force.
git push --force # JANGAN di branch bersama!--force menimpa riwayat remote dan bisa menghapus kerjaan orang. Hanya boleh untuk branch pribadimu, tidak pernah untuk branch bersama.
BENAR: tarik dulu, gabungkan, baru push.
git pull --rebase
git pushgit pull --rebase mengambil commit baru dari remote lalu menaruh commit-mu di atasnya, sehingga riwayat tetap linear dan push-mu diterima. KAPAN pola ini dipakai? Setiap kali push ditolak dengan pesan "fetch first". Jadikan refleks: tolak -> pull --rebase -> push.
Kesalahan umum pemula: salah vs benar
SALAH: lupa -u di push pertama branch baru, lalu bingung kenapa git push berikutnya error "no upstream branch".
BENAR: selalu pakai -u saat pertama kali push branch baru. Kalau telanjur lupa, perbaiki dengan:
git push -u origin nama-branchSALAH: mengira git push mengirim SEMUA branch. Tidak, default-nya hanya branch yang aktif.
BENAR: pahami bahwa git push polos = kirim branch aktif ke upstream-nya. Butuh kirim semua? git push --all. Butuh hapus branch di remote? git push origin --delete nama-branch (sintaks yang aneh tapi itulah caranya).
Catatan teknis: pasangan upstream tersimpan di
.git/configlokalmu. Intip dengangit branch -vvuntuk melihat branch mana track ke mana. Konfigurasi ini lokal saja, tidak ikut ke-push ke remote.
Tantangan
Rasakan push ditolak
Simulasi: buat repo GitHub kosong (tanpa README). Di laptop A: init, commit, push -u origin main. Di folder lain (laptop B simulasi): clone, tambah commit, push. Kembali ke A: buat commit TANPA pull, lalu push. Amati pesan 'rejected', lalu perbaiki dengan git pull --rebase + push.