Rujukan pantas satu halaman untuk semua command Git, workflow, template, dan penyelesaian masalah.
Rujukan pantas — command, penerangan, dan contoh.
git --versionSemak versi Gitgit config --global user.name "Nama"Set nama untuk commitgit config --global user.email "em@il"Set email untuk commitgit config --global init.defaultBranch mainDefault branch name = maingit config --listSemak semua konfigurasigit initCipta repo git baru dalam folder semasagit clone <url>Salin repo dari GitHub ke tempatangit clone <url> .Clone ke dalam folder semasagit statusSemak keadaan semasa repogit add <fail>Stage fail tertentugit add .Stage semua perubahangit commit -m "mesej"Commit dengan mesejgit commit -am "mesej"Add + commit sekali (fail tracked sahaja)git commit --amend -m "mesej baru"Ubah mesej commit terakhirgit branchSenarai semua branch tempatangit branch <nama>Cipta branch barugit branch -d <nama>Padam branchgit checkout <branch>Tukar ke branch laingit checkout -b <nama>Buat dan terus tukar ke branch barugit merge <branch>Merge branch ke branch semasagit log --oneline --graphVisual sejarah commit dengan branchgit remote add origin <url>Sambung ke remote GitHubgit remote -vSenarai remote yang disambunggit push -u origin <branch>Push dan set upstream (kali pertama)git pushPush ke remote (kali kedua dan seterusnya)git pullAmbil perubahan dari remotegit fetchAmbil info remote tanpa mergegit pull --rebasePull dan rebase (sejarah linear)git log --onelineSejarah commit ringkasgit diffLihat perubahan belum stagegit diff --stagedLihat perubahan yang sudah stagegit restore <fail>Kembalikan fail ke versi commit terakhirgit restore --staged <fail>Keluarkan fail dari staginggit reset --soft HEAD~1Batal commit terakhir, simpan perubahangit stashSimpan sementara perubahan belum siapgit stash popKeluarkan stash terakhirgit reflogSejarah semua pergerakan HEAD (rescue tool)Visual workflow — dari init hingga deploy.
git remote add upstream <repo-asal> → git pull upstream mainFail dan folder yang patut dikecualikan dari Git.
Error biasa dan penyelesaian cepat.
| Error | Sebab | Penyelesaian |
|---|---|---|
Please tell me who you are |
Git config nama/email belum set | git config --global user.name "Nama"git config --global user.email "em@il" |
fatal: not a git repository |
Tak dalam folder repo git | git init atau cd ke folder repo |
fatal: No configured push destination |
Remote belum diset | git remote add origin <url> |
fatal: The current branch has no upstream branch |
Branch tak guna -u masa push pertama | git push -u origin nama-branch |
! [rejected] — fetch first |
Remote ada commit baru | git pull --rebase → git push |
Merge conflict in <fail> |
Dua branch ubah line sama | Buka fail → resolve <<< === >>> → git add → git commit |
You are in 'detached HEAD' state |
Checkout ke commit tertentu (bukan branch) | git checkout nama-branch |
fatal: refusing to merge unrelated histories |
Cuba merge dua repo yang tak berkaitan | git pull origin main --allow-unrelated-histories |
Cannot rebase: Your index contains uncommitted changes |
Ada perubahan belum commit/stash | git stash → rebase → git stash pop |
error: pathspec 'x' did not match any files |
Fail yang disebut tak wujud | Semak ejaan atau git status untuk lihat fail sebenar |
fatal: remote origin already exists |
Remote dah ada, nak ganti | git remote set-url origin <url-baru> |
warning: LF will be replaced by CRLF |
Perbezaan line endings Windows/Unix | git config --global core.autocrlf true (Windows) |
Authentication failed |
Password/token salah atau expired | Guna Personal Access Token (Settings → Developer → PAT) |
fatal: remote error: Repository not found |
URL salah atau repo private | Semak URL, pastikan ada akses ke repo |
git reset --hard akan padam perubahan yang belum commit. Backup dulu kalau ragu-ragu. Jangan panik — Git almost everything is recoverable melalui reflog.Kesilapan yang selalu dilakukan oleh pelajar dan developer baru — dan cara elakkan atau perbaikinya.
Masalah: Pelajar buka terminal di Desktop, taip git init, sedangkan folder Desktop mengandungi banyak projek lain. Lepas tu, dalam folder projek, git status tunjuk fail-fail dari folder lain.
Sebab: Git cari folder .git secara rekursif ke atas. Kalau ada .git di Desktop, semua subfolder akan guna repo yang sama.
git init hanya dalam folder projek yang spesifik. Semak guna git rev-parse --git-dir untuk tahu di mana root repo. Kalau tersalah, padam folder .git yang salah: rm -rf .git (di folder yang betul).Masalah: Pelajar simpan API_KEY=abc123 terus dalam kod dan commit ke public repo. Dalam masa beberapa minit, bot GitHub akan scan dan guna key tersebut.
Sebab: GitHub Sentry (dan pihak ketiga) sentiasa scan public repo untuk credential yang terdedah.
.env untuk secrets — jangan commit! Tambah .env dalam .gitignore. Kalau dah terlanjur expose: revoke key segera di dashboard provider. Guna git filter-branch atau BFG Repo-Cleaner untuk padam dari sejarah.Masalah: Bulan depan, pelajar sendiri pun tak ingat apa yang dia buat dalam commit "update" itu. Dalam pasukan, review PR jadi mustahil.
Sebab: Malas atau tak biasa tulis mesej bermakna.
[jenis]: [apa yang berubah]. Contoh: feat: add login form, fix: correct navbar height on mobile, docs: update README with install guide. Biasakan guna conventional commit format.Masalah: Pelajar push terus ke main untuk projek berkumpulan. Bila ada yang tak sengaja push kod rosak, semua orang terduduk.
Sebab: Tak biasa dengan workflow branch, rasa "buang masa" nak buat branch dulu.
git checkout -b feature-anda ambil masa 1 saat. Guna branch protection rules di GitHub (Settings → Branches) untuk restrict direct push ke main. Wajibkan PR untuk sebarang perubahan ke main.Masalah: Merge conflict muncul, pelajar panik atau ignore. Lepas merge paksa (--force), kod jadi broken dan separuh.
Sebab: Takut dengan conflict markers dan tak tahu cara resolve.
<<<<<<< ======= >>>>>>>. Baca dua versi, pilih atau gabung. Guna VS Code — ia ada UI untuk "Accept Current", "Accept Incoming", "Accept Both". Lepas resolve, git add dan git commit. Practice makes perfect! Masalah: Pelajar clone repo, tak git pull, terus edit. Rakan sepasukan dah push perubahan baru. Bila nak push sendiri, Git reject — "fetch first".
Sebab: Anggapkan clone dapat versi terkini — tapi antara masa clone dan edit, orang lain dah update.
git checkout main && git pull. Sebelum push: git pull --rebase untuk ambil perubahan terkini. Ini jadi tabiat harian — pull dulu sebelum mula coding.Masalah: Pelajar buat git add . tanpa .gitignore. Semua node_modules/ (ribuan fail, ratusan MB) masuk ke staging dan kemudian ke GitHub.
Sebab: Lupa atau tak tahu tentang .gitignore.
.gitignore mesti dibuat sebelum git add . pertama. Kalau dah terlanjur: git rm --cached -r node_modules/ (keluarkan dari Git tapi simpan tempatan)node_modules/ dalam .gitignoregit commit -m "chore: add gitignore and remove node_modules"Masalah: Push rejected — pelajar frustrated, guna git push --force tanpa sedar ia akan ganti sejarah remote dengan sejarah tempatan. Commit rakan sepasukan hilang.
Sebab: --force = "saya tahu lebih baik, jangan tanya". Dalam kolaborasi, ini sangat bahaya.
git push --force-with-lease sebagai alternatif — ia akan check kalau remote ada commit yang tempatan tak tahu, dan tolak force push. Untuk selamat: git pull --rebase dulugit pushMasalah: Pelajar edit README.md terus di GitHub web (untuk "cepat"). Lepas tu edit README yang sama di komputer tempatan. Bila push, dia tak boleh — "merge conflict".
Sebab: Dua versi berbeza untuk fail yang sama — satu di GitHub, satu tempatan. Git tak tahu mana satu betul.
git pull dulu, resolve conflict, baru push.Masalah: Pelajar buat semua tugasan GitHub secara manual — buka browser, login, navigate, klik. Ambil masa berbanding guna automation.
Sebab: Tak tahu tentang GitHub MCP (Model Context Protocol) dalam Claude Code.
Command dan prompt untuk GitHub MCP dalam Claude Code.
mcp__github__authenticateMulakan OAuth — login ke GitHubgh auth loginAlternatif — guna GitHub CLIcode-review:code-review untuk review PR yang lebih mendalam dan berstruktur.