Anda dah belajar 25 minit. Rehat sekejap bantu otak anda.
Pecutan selesai! Fokus yang hebat. Regangkan badan seminit?
Helaian rujukan
Arahan yang anda dah belajar, di satu tempat.
Asas terminal
Persediaan
git --versionGit ada? Versi berapa?git config --global user.name "Aiman"Beritahu Git nama anda, untuk semua projek.git config --global user.email "aiman@example.com"Tetapkan e-mel anda.git config --global init.defaultBranch mainRepo baru mula di main.git config --listTunjuk semua tetapan anda.git add -hBantuan ringkas, terus dalam terminal.git help commitHalaman manual penuh.
Simpan kerja anda
git initGit mula jaga folder ini.git statusHijau = dalam kotak. Merah = belum.git status -sPaparan pendek.git add index.htmlMasukkan satu fail ke dalam kotak.git add .Masukkan semua perubahan di sini ke dalam kotak.git add -pPilih bahagian perubahan, satu demi satu.git commit -m "Add day 1 page"Simpan dengan mesej yang jelas.git commit -am "Fix typo"Add perubahan yang dijejak dan commit sekali gus.git commit --amend -m "Better message"Ganti commit terakhir. Jangan selepas push!git rm old.htmlPadam dan masukkan pemadaman ke kotak.Risiko: Hati-hatigit rm --cached secret.txtBerhenti jejak, tapi simpan fail itu.Risiko: Hati-hatigit mv home.html index.htmlTukar nama. Git tahu ia dialih.
Lihat sejarah
git log --onelineSatu baris setiap commit.git log --oneline --graph --allLukis seluruh sejarah.git show HEAD~1Tunjuk commit sebelum yang terakhir.git diffPerubahan yang belum masuk kotak.git diff --stagedPerubahan dalam kotak.git diff HEAD~2 HEADAntara dua commit.git branch* main maksudnya anda di main.
Undur
git restore index.htmlBuang perubahan. Ia hilang terus!Risiko: Boleh hilang kerjagit restore --staged index.htmlKeluarkan dari kotak. Selamat: perubahan kekal.Risiko: Boleh hilang kerjagit reset --soft HEAD~1Undur commit terakhir. Perubahan kekal dalam kotak.Risiko: Hati-hatigit reset HEAD~1Perubahan kembali ke folder anda.Risiko: Hati-hatigit reset --hard HEAD~1Perubahan dihapus. Bahaya!Risiko: Hati-hatigit revert HEADUndur commit terakhir, dengan selamat.git switch mainKembali ke main.git switch --detach HEAD~2Lawat commit lama (HEAD terlerai).git switch -Kembali ke tempat tadi.git checkout a1b2c3dLawat commit a1b2c3d (HEAD terlerai).Risiko: Hati-hatigit clean -nPratonton sahaja. Tiada yang dipadam.Risiko: Boleh hilang kerjagit clean -fPadam. Git tak boleh kembalikan.Risiko: Boleh hilang kerjagit clean -fdFolder tak dijejak juga.Risiko: Boleh hilang kerjagit reflogCari commit yang hilang.git reset --hard HEAD@{1}Lompat balik ke tempat HEAD satu langkah lalu.git filter-repo --sensitive-data-removal --invert-paths --path .envPadam .env dari seluruh sejarah. Setiap id commit selepasnya berubah.Risiko: Boleh hilang kerjagit filter-repo --sensitive-data-removal --replace-text ../secrets.txtGanti teks rahsia yang disenaraikan dalam fail, dalam setiap commit.Risiko: Boleh hilang kerja
Branch dan merge
git branch feature/login-formBuat branch baru di sini. Anda kekal di tempat sama.Risiko: Hati-hatigit branch -d feature/login-formPadam branch yang dah di-merge. Selamat.Risiko: Hati-hatigit branch -D old-ideaPadam walaupun belum di-merge. Hati-hati!Risiko: Hati-hatigit branch -m new-nameTukar nama branch tempat anda berada.Risiko: Hati-hatigit branch --mergedBranch mana yang dah di-merge ke sini?Risiko: Hati-hatigit switch -c hotfix/pay-buttonBranch baru, dan anda kini di situ.git checkout -b hotfix/pay-buttonCara lama untuk buat benda sama.git switch -Lompat balik ke branch tadi.git merge feature/login-formBawa borang log masuk ke branch ini.git merge --no-ff feature/login-formSentiasa buat merge commit, walaupun Git boleh fast-forward.git merge --abortTersekat dalam konflik? Kembali ke sebelum merge.git stashSimpan dulu perubahan saya.Risiko: Hati-hatigit stash popKeluarkan semula stash paling baru.Risiko: Hati-hatigit stash listTengok isi laci.Risiko: Hati-hatigit stash -uSimpan juga fail baru yang tak dijejak.Risiko: Hati-hatigit stash dropBuang satu stash. Ia hilang!Risiko: Hati-hatigit rebase mainLetak commit branch saya di atas main yang terkini.Risiko: Hati-hatigit rebase --continueTeruskan selepas anda baiki konflik dan add.Risiko: Hati-hatigit rebase --abortBatal dan kembali macam asal.Risiko: Hati-hatigit rebase -i mainKemaskan commit anda: squash, reword, drop, susun semula.Risiko: Hati-hatigit cherry-pick a1b2c3dSalin commit itu ke sini.git cherry-pick --abortBerhenti dan kembali macam sebelum.
Bekerja dengan GitHub
git remote add origin https://github.com/you/diary.gitPanggil alamat GitHub ini origin.git remote -vTunjuk setiap remote dan alamatnya.git remote rename origin upstreamBeri remote nama baru.git remote set-url origin <new-url>Repo berpindah? Kemas kini alamatnya.git push -u origin mainPush pertama: hantar main dan ingat ke mana ia pergi.Risiko: Hati-hatigit pushSelepas kali pertama, ini dah cukup.Risiko: Hati-hatigit push --tagsHantar tag anda juga.Risiko: Hati-hatigit push origin --delete old-branchPadam branch di remote.Risiko: Hati-hatigit push --force-with-leasePaksa, tapi berhenti jika orang lain dah push sejak fetch terakhir anda.Risiko: Boleh hilang kerjagit push --forcePaksa tanpa semakan keselamatan. Elakkan.Risiko: Boleh hilang kerjagit clone https://github.com/you/diary.gitBuat folder diary dengan seluruh projek.git fetchKemas kini origin/main, kemudian tengok dengan git status.git fetch --pruneLupakan juga branch remote yang dah dipadam.git pullDapatkan kerja terkini dari GitHub.Risiko: Hati-hatigit pull --rebaseLetak commit baru anda di atas commit mereka.Risiko: Hati-hatigit pull --no-rebaseCantum dengan merge commit.Risiko: Hati-hatigit config pull.rebase falsePilih merge sebagai cara biasa untuk pull.Risiko: Hati-hatigit tag -a v1.0 -m "First release"Tag commit ini sebagai versi 1.0, dengan nota.git tagSenaraikan tag anda.git push origin v1.0Hantar satu tag ke GitHub.git tag -d v1.0Padam tag di komputer anda.
Alatan GitHub
gh repo clone aina-codes/diarySalin repo diary ke dalam folder diary baru.gh repo fork aina-codes/diary --cloneFork repo itu, kemudian salin fork anda ke komputer.gh issue create --title "Typo on home page" --body "It says Dairy."Laporkan salah ejaan. gh cetak pautan issue baru itu.gh issue create --webHabiskan tulis issue itu dalam pelayar.gh issue list --label bugTunjuk issue terbuka berlabel bug sahaja.gh pr create --fillGuna mesej commit anda sebagai tajuk dan isi.gh pr create --title "Fix typo" --body "Closes #5"Tulis tajuk dan isi sendiri.gh pr checkout 6Tukar ke branch pull request 6.gh codespace create --repo aina-codes/diaryBuat Codespace untuk repo diary. Ia guna had bulanan anda.gh codespace code --webBuka Codespace dalam pelayar anda.gh codespace stopHentikan Codespace bila anda dah selesai.
Git mendalam
git cat-file -p HEADCetak commit terbaru: tree, induk, pengarang dan mesejnya.git cat-file -t HEAD^{tree}Cetak jenis objek. Di sini ia sebut tree.git cat-file -s HEADCetak saiz objek dalam bait.git hash-object index.htmlCetak id blob bagi index.html. Tiada apa disimpan.git hash-object -w notes.txtJuga simpan isi itu dalam Git sebagai blob.git ls-tree HEADSenaraikan folder atas bagi commit terbaru.git ls-tree -r --name-only HEAD~1Senaraikan setiap fail bagi commit yang lebih lama.git rev-parse HEAD~2Cetak id penuh commit dua langkah ke belakang.git rev-parse --short HEADCetak id pendek sebagai ganti.git rev-parse --abbrev-ref HEADCetak nama branch anda.git rev-parse --show-toplevelCetak folder paling atas repo ini.git log -S "TODO" --onelineTunjuk commit yang tambah atau buang perkataan TODO.git log -G "phone|Call" -pTunjuk commit yang baris ubahannya padan, dengan perubahannya.git log --author=Aisyah --onelineTunjuk commit yang Aisyah buat sahaja.git log --grep=footer -i --onelineTunjuk commit yang mesejnya sebut footer, huruf besar atau kecil.git grep -n footerTunjuk setiap baris dengan footer, berserta nombor baris.git grep TODO HEAD~2Cari dalam fail seperti dua commit dahulu.git blame index.htmlSetiap baris dapat id commit, nama dan tarikh.git blame -L 2,3 index.htmlTengok baris 2 hingga 3 sahaja.git shortlog -snKira commit setiap orang, yang paling banyak dulu.git bisect start HEAD HEAD~9Bad ialah HEAD, good sembilan commit ke belakang. Git checkout yang tengah.Risiko: Hati-hatigit bisect goodCommit yang anda uji berfungsi.Risiko: Hati-hatigit bisect badCommit yang anda uji rosak.Risiko: Hati-hatigit bisect run sh test.shBiar skrip ujian menilai setiap langkah untuk anda.Risiko: Hati-hatigit bisect resetTamatkan dan kembali ke branch anda.Risiko: Hati-hatigit worktree add ../hotfix -b hotfixBuat folder ../hotfix di branch baru bernama hotfix.Risiko: Hati-hatigit worktree listTunjuk setiap folder kerja dan branchnya.Risiko: Hati-hatigit worktree remove ../hotfixPadam folder itu. Branch dan commitnya kekal.Risiko: Hati-hatigit config --global alias.st statusSekarang git st sama dengan git status.git config --global alias.lg "log --oneline --graph --all"git lg lukis seluruh sejarah anda.git config --global --get-regexp aliasSenaraikan semua alias anda.git show-refSetiap baris: id, kemudian ref seperti refs/heads/main.git show-ref --headsBranch sahaja.git pack-refs --allPadatkan branch juga, bukan tag sahaja.git gcPadat dan kemas sekarang. Objek dalam reflog kekal selamat.Risiko: Hati-hatigit gc --prune=nowBuang objek yang tak boleh dicapai serta-merta, tanpa tempoh tangguh.Risiko: Hati-hatigit maintenance startJalankan kerja itu ikut jadual untuk repo ini.git maintenance stopHentikan kerja berjadual itu.git submodule add https://github.com/you/kuih-menu.git menuPautkan repo kuih-menu ke dalam folder bernama menu.Risiko: Hati-hatigit submodule update --init --recursiveIsi folder submodule yang kosong selepas clone biasa.Risiko: Hati-hatigit clone --recurse-submodules https://github.com/you/shop.gitClone repo dan submodulenya sekali gus.Risiko: Hati-hatigit sparse-checkout set docsPapar folder docs sahaja (dan fail di bahagian atas).git sparse-checkout disablePapar semua folder semula.git config --global rerere.enabled trueHidupkan sekali. Selepas itu Git rakam pembaikan sendiri.git rerere forget index.htmlBuang pembaikan yang dirakam yang anda tak mahu lagi.git range-diff main feature@{1} featureBanding branch sebelum dan selepas rebase anda.