gitpushremoteMenengah4 mnt baca

git push & Upstream Tracking

Mengirim commit ke remote, memahami -u, dan membaca output push.

Push pertama dan arti -u

bash
git push -u origin main

Perintah 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.

bash
git push -u origin main
bash
Enumerating 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.

bash
git switch -c fitur-baru
# ... kerja, commit ...
git push -u origin fitur-baru
bash
 * [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.

bash
git push
bash
! [rejected]  main -> main (fetch first)
error: failed to push some refs

Artinya 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.

bash
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.

bash
git pull --rebase
git push

git 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:

bash
git push -u origin nama-branch

SALAH: 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/config lokalmu. Intip dengan git branch -vv untuk 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.