Cheat sheet

Mga command ng Git: cheat sheet na may mga halimbawa para sa araw-araw

Na-update: · Skillaria.Top

Ang pangunahing command ng Git ay git init at git clone para gumawa o kopyahin ang repository, git status, git add, at git commit para i-save ang pagbabago, git branch, git switch, at git merge para sa mga branch, git push, git fetch, at git pull para sa sync sa server, at git restore, git reset, at git revert para mag-undo.

Narito ang praktikal na cheat sheet ng Git: nakapangkat ang mga command ayon sa gawain, may halimbawa at maikling paliwanag ang bawat isa. Maginhawang itabi ito nang bukas sa tabi ng terminal: halos lahat ng ginagawa ng developer sa Git sa isang araw ay nasa 20 hanggang 30 command sa mga talahanayang ito.

Para maging makabuluhan ang mga command, panatilihing nasa isip ang tatlong lugar: ang working directory (mga file sa disk), ang index o staging area (kung ano ang papasok sa susunod na commit), at ang repository (history ng commit sa folder na .git). Karamihan sa command ng Git ay naglilipat ng pagbabago sa pagitan ng tatlong lugar na ito, o sa pagitan ng lokal at remote na repository.

Setup ng Git

Isang beses lang ginagawa ang mga command na ito pagkatapos ng install. Isinusulat ng flag na --global ang mga setting sa ~/.gitconfig at sakop nito ang lahat ng repository ng user; kung wala ito, sa kasalukuyang repository lang.

CommandAno ang ginagawa
git config --global user.name "Juan Dela Cruz"Pangalan ng author ng mga commit
git config --global user.email "juan@example.com"E-mail ng author ng mga commit
git config --global init.defaultBranch mainPangalan ng default na branch sa mga bagong repository
git config --global core.editor "code --wait"Editor para sa mga mensahe ng commit (dito, VS Code)
git config --global pull.rebase falseDefault na kilos ng git pull: merge
git config --global core.autocrlf inputPagpapalit ng CRLF sa LF kapag nag-commit (macOS/Linux; sa Windows karaniwang true)
git config --list --show-originIpakita ang lahat ng setting at kung saang file galing ang bawat isa
git config --global alias.st statusAlias: git st sa halip na git status
git --versionBersyon ng naka-install na Git
git help commitBuong tulong sa command (o git commit -h para sa maikli)

Paggawa at pag-clone ng repository

CommandAno ang ginagawa
git initGumagawa ng walang-lamang repository (folder na .git) sa kasalukuyang direktoryo
git init my-projectGumagawa ng folder na my-project at repository sa loob nito
git clone https://github.com/user/repo.gitKinokopya ang remote repository kasama ang buong history
git clone git@github.com:user/repo.git appNagc-clone sa pamamagitan ng SSH sa folder na app
git clone --depth 1 URLShallow clone: huling commit lang, mabilis at kaunting espasyo
git clone -b develop URLNagc-clone at lumilipat agad sa branch na develop

Pangunahing ikot: status, add, commit

Ito ang sentro ng araw-araw na trabaho: tingnan kung ano ang nagbago, piliin ang kailangan sa index, at i-record ito bilang commit.

CommandAno ang ginagawa
git statusEstado: mga binagong, naihandang, at hindi sinusubaybayang file
git status -sMaikling format: M ay binago, A ay idinagdag, ?? ay hindi sinusubaybayan
git add file.txtIdagdag ang file sa index
git add .Idagdag ang lahat ng pagbabago sa kasalukuyang direktoryo at sa ibaba nito, kasama ang mga pagbura
git add -AIdagdag ang lahat ng pagbabago sa buong repository
git add -pInteractive na pumili ng mga bahagi (hunks) ng pagbabago
git commit -m "Idagdag ang login form"Gumawa ng commit mula sa index na may mensahe
git commit -am "Ayusin ang typo"I-index ang lahat ng binagong sinusubaybayang file at i-commit; hindi kasama ang mga bagong file
git commit --amendIsulat muli ang huling commit: idagdag ang nakalimutan sa index o itama ang mensahe
git commit --amend --no-editDagdagan ang huling commit nang hindi binabago ang mensahe
git rm file.txtBurahin ang file sa disk at sa index
git rm --cached secret.envItigil ang pagsubaybay sa file, pero nasa disk pa rin
git mv old.js new.jsPalitan ang pangalan o ilipat ang file

Karaniwang senaryo:

git status
git add src/login.js src/login.css
git diff --staged          # suriin kung ano talaga ang papasok sa commit
git commit -m "Idagdag ang login form"

Huwag gamitin ang --amend sa mga commit na naipadala na sa shared na branch: gumagawa ito ng bagong commit na may ibang hash, at kailangang intindihin ng mga kasama ang nagkaibang history.

Pagtingin sa history at mga pagbabago

CommandAno ang ginagawa
git logHistory ng mga commit sa kasalukuyang branch
git log --onelineBawat commit sa isang linya: maikling hash at pamagat
git log --oneline --graph --allGraph ng lahat ng branch sa terminal
git log -p file.txtHistory ng file kasama ang diff ng bawat commit
git log --author="Juan" --since="2 weeks ago"Filter ayon sa author at petsa
git log -S "getUser"Mga commit na nagdagdag o nagbura ng linyang getUser
git log main..featureMga commit na nasa feature pero wala sa main
git diffMga pagbabago sa working directory na hindi pa nasa index
git diff --stagedMga pagbabago sa index kumpara sa huling commit (kapareho ng --cached)
git diff main featurePagkakaiba ng dulo ng dalawang branch
git diff HEAD~3 -- src/Mga pagbabago sa folder na src sa nakaraang tatlong commit
git show a1b2c3dMetadata at diff ng isang partikular na commit
git show HEAD:README.mdNilalaman ng file sa huling commit
git blame app.jsSino at sa aling commit huling binago ang bawat linya
git shortlog -snBilang ng commit kada author

Kapaki-pakinabang kahit saan ang mga reference sa commit: HEAD ang kasalukuyang commit, HEAD~1 ang magulang nito, HEAD~3 ang tatlong hakbang paatras sa unang magulang, at HEAD^2 ang ikalawang magulang ng merge commit.

Mga branch: paggawa, paglipat, pagbura

Mula sa bersyon 2.23, may git switch para sa mga branch at git restore para sa mga file: pinaghiwalay nila ang sobrang gawaing ginagampanan ng git checkout. Gumagana pa rin ang mga lumang anyo.

CommandAno ang ginagawa
git branchListahan ng lokal na branch; minamarkahan ng * ang kasalukuyan
git branch -aLokal at remote-tracking na branch
git branch -vvMga branch kasama ang huling commit at kung ilang commit ang nahuhuli o nauuna sa upstream
git branch feature/loginGumawa ng branch nang hindi lumilipat
git switch feature/loginLumipat sa branch
git switch -c feature/loginGumawa ng branch at lumipat (katumbas ng git checkout -b)
git switch -Bumalik sa nakaraang branch
git branch -m new-namePalitan ang pangalan ng kasalukuyang branch
git branch -d feature/loginBurahin ang branch kung na-merge na
git branch -D feature/loginPuwersahang burahin ang branch, kahit hindi pa na-merge
git branch --mergedMga branch na na-merge na sa kasalukuyan; kandidato sa pagbura

Merge at rebase

CommandAno ang ginagawa
git merge featureI-merge ang feature sa kasalukuyang branch (fast-forward kung posible)
git merge --no-ff featureLaging gumawa ng merge commit
git merge --squash featurePagsamahin ang lahat ng pagbabago ng branch sa index bilang isang set, saka git commit
git merge --abortKanselahin ang merge na may conflict at bumalik sa dating estado
git rebase mainIlipat ang mga commit ng kasalukuyang branch sa ibabaw ng main
git rebase -i HEAD~4Interactive: pagsamahin (squash), palitan ang pangalan, ayusin ang pagkakasunod, o burahin ang huling 4 na commit
git rebase --continueIpagpatuloy pagkatapos ayusin ang conflict
git rebase --abortKanselahin nang buo ang rebase
git cherry-pick a1b2c3dIlapat ang isang commit sa kasalukuyang branch bilang bagong commit

Halos palaging pareho ang pag-ayos ng conflict sa merge:

git merge feature
# CONFLICT (content): Merge conflict in app.js
git status                 # nasa seksyong "both modified" ang mga file
# ayusin ang app.js, burahin ang mga marker na <<<<<<< ======= >>>>>>>
git add app.js
git commit                 # magmumungkahi ang Git ng handang mensahe ng merge commit

Pangunahing tuntunin ng rebase: huwag i-rebase ang mga commit na nasa shared na branch na at kung saan nakabatay na ang gawa ng iba.

Pagtatrabaho sa remote repository

CommandAno ang ginagawa
git remote -vListahan ng mga remote at ng kanilang address
git remote add origin git@github.com:user/repo.gitIkabit ang remote repository sa pangalang origin
git remote set-url origin NEW_URLPalitan ang address ng remote (halimbawa mula HTTPS papuntang SSH)
git remote remove upstreamAlisin ang remote
git fetchKunin ang bagong commit at branch nang hindi ginagalaw ang mga file ninyo
git fetch --pruneKapareho ng nasa itaas, at burahin din ang mga reference sa branch na nabura na sa server
git pullgit fetch + i-merge ang upstream na branch sa kasalukuyan
git pull --rebasegit fetch + i-rebase ang mga commit ninyo sa ibabaw ng nakuha
git pushIpadala ang mga commit ng kasalukuyang branch sa upstream nito
git push -u origin feature/loginUnang pagpapadala ng branch, kasabay ng pagtatakda ng upstream
git push --force-with-leaseI-overwrite ang remote na branch, pero kung walang bagong commit doon mula sa iba
git push origin --delete feature/loginBurahin ang branch sa server
git push --tagsIpadala ang lahat ng lokal na tag

Sa halip na git push --force, sanayin ang --force-with-lease: kung may naipadala nang bago ang kasamahan sa parehong branch, tatanggi ang command na i-overwrite ang gawa niya.

Pag-undo ng mga pagbabago

Ito ang pinakanakakakabang bahagi ng Git. Ang pangunahing tanong bago pumili ng command: nasaan na ang pagbabago, sa mga file pa lang, nasa index na, nasa lokal na commit, o nasa commit na na-publish na?

SitwasyonCommand
I-undo ang mga pagbabago sa file (ibalik sa huling commit)git restore app.js
Alisin ang file sa index, pero itira ang pagbabagogit restore --staged app.js
Ibalik ang file mula sa isang partikular na commitgit restore --source=a1b2c3d app.js
I-undo ang huling commit, itira ang pagbabago sa indexgit reset --soft HEAD~1
I-undo ang huling commit, itira ang pagbabago sa mga filegit reset HEAD~1 (mode na --mixed ang default)
Burahin ang huling commit at lahat ng pagbabago nitogit reset --hard HEAD~1
I-undo ang na-publish na commit sa pamamagitan ng bagong "baligtad" na commitgit revert a1b2c3d
I-undo ang merge commitgit revert -m 1 <merge-hash>
Tingnan kung aling hindi sinusubaybayang file ang mabuburagit clean -n
Burahin ang hindi sinusubaybayang file at foldergit clean -fd
Hanapin ang "nawalang" commit pagkatapos ng reset o rebasegit reflog, saka git reset --hard HEAD@{2}

Binubura nang tuluyan ng git reset --hard at git clean -f ang mga hindi pa naka-commit na pagbabago: sinusubaybayan ng reflog ang mga commit, hindi ang mga pagbabago sa working directory. Bago gamitin ang mga ito, patakbuhin ang git stash, o kahit git status man lang.

Stash: itabi ang hindi pa tapos na gawain

CommandAno ang ginagawa
git stashItago ang mga pagbabago ng sinusubaybayang file at linisin ang working directory
git stash push -u -m "wip: form"Itago kasama ang mga hindi sinusubaybayang file, may paglalarawan
git stash listListahan ng mga naitabing set: stash@{0}, stash@{1}…
git stash show -p stash@{0}Tingnan ang diff ng naitabing set
git stash popIbalik ang pinakahuling set at burahin ito sa listahan
git stash apply stash@{1}Ibalik ang set at itira ito sa listahan
git stash drop stash@{1}Burahin ang isang set
git stash branch fix-formGumawa ng branch mula sa commit kung saan ginawa ang stash at ilapat ito

Mga tag at release

CommandAno ang ginagawa
git tagListahan ng mga tag
git tag -a v1.2.0 -m "Release 1.2.0"Annotated na tag na may author, petsa, at mensahe
git tag v1.2.0 a1b2c3dMagaang tag sa isang partikular na commit
git push origin v1.2.0Ipadala ang isang tag
git tag -d v1.2.0Burahin ang tag nang lokal
git push origin --delete v1.2.0Burahin ang tag sa server
git describe --tagsPinakamalapit na tag at bilang ng commit pagkatapos nito, halimbawa v1.2.0-3-ga1b2c3d

Mga advanced na command ng Git

CommandAno ang ginagawa
git bisect start, git bisect bad, git bisect good v1.1.0Binary search para sa commit na nagpakilala ng bug; sa dulo, git bisect reset
git worktree add ../hotfix mainPangalawang working folder na may ibang branch mula sa iisang repository
git submodule update --init --recursiveI-download ang mga submodule pagkatapos ng clone
git grep "TODO"Mabilis na paghahanap sa mga sinusubaybayang file
git format-patch -1 HEAD / git apply fix.patchI-save ang commit bilang patch at ilapat ang patch sa working directory
git gcI-pack ang mga object at linisin ang repository (kadalasan, ginagawa ito ng Git nang mag-isa)

Karaniwang pagkakamali at ang pag-ayos nito

Nag-commit sa main sa halip na sa bagong branch

Kung hindi pa naipapadala ang commit, gumawa ng branch sa kasalukuyang commit at ibalik ang main:

git branch feature/login      # tuturo ang branch sa commit ninyo
git reset --hard HEAD~1       # babalik ang main ng isang hakbang
git switch feature/login

Nakalimutang idagdag ang file sa huling commit

git add forgotten.js
git commit --amend --no-edit

Na-reject ang push: rejected, non-fast-forward

May mga commit sa server na wala pa sa inyo. Kunin muna ang mga ito, saka ipadala:

git pull --rebase
git push

Aksidenteng na-commit ang file na may password

Alisin ito sa pagsubaybay at idagdag sa .gitignore: git rm --cached .env, saka mag-commit. Kung na-publish na ang commit, ituring na na-compromise ang secret at palitan ito: hindi ito nawawala sa history.

Buod

Para sa araw-araw na trabaho, sapat na ang maikling hanay: status, add, commit, switch, merge, pull, push, at log --oneline. Ang mga command ng pag-undo, restore, reset, at revert, ay pinipili ayon sa kung na-publish na ba ang commit, at ang reflog ay tandaan bilang panangga sa matinding sitwasyon. Lahat ng command sa cheat sheet na ito ay tinatalakay nang praktikal sa kurso ng Git, kung saan sinusubukan ang bawat isa sa sariling repository.

Mga madalas itanong

Ilang command ng Git ang kailangang malaman ng baguhan?

Para magsimula, sapat na ang 10 hanggang 12: init, clone, status, add, commit, log, diff, branch, switch, merge, pull, at push. Ang iba ay natututuhan habang lumilitaw ang mga gawain.

Ano ang pagkakaiba ng git switch at git checkout?

Ang git switch ay para lang sa paglipat at paggawa ng branch, samantalang ang git checkout ay nagre-restore din ng mga file. Pinaghiwalay ang switch at restore para hindi aksidenteng mabura ang pagbabago dahil napagkamalang file ang branch.

Paano makita ang tulong para sa anumang command ng Git?

Patakbuhin ang git help pangalan-ng-command para sa buong manual, o git pangalan-ng-command -h para sa maikling listahan ng mga flag. Nasa git-scm.com din ang parehong dokumentasyon.

Puwede bang paikliin ang mahahabang command ng Git?

Oo, gamit ang alias: ang git config --global alias.lg "log --oneline --graph --all" ay nagpapahintulot na i-type ang git lg.

Gumagana ba ang mga command na ito sa Windows?

Oo, pareho ang mga command sa lahat ng system. Sa Windows, maginhawang patakbuhin ang mga ito sa Git Bash, PowerShell, o sa terminal ng code editor.