Mga command ng Git: cheat sheet na may mga halimbawa para sa araw-araw
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.
| Command | Ano 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 main | Pangalan 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 false | Default na kilos ng git pull: merge |
git config --global core.autocrlf input | Pagpapalit ng CRLF sa LF kapag nag-commit (macOS/Linux; sa Windows karaniwang true) |
git config --list --show-origin | Ipakita ang lahat ng setting at kung saang file galing ang bawat isa |
git config --global alias.st status | Alias: git st sa halip na git status |
git --version | Bersyon ng naka-install na Git |
git help commit | Buong tulong sa command (o git commit -h para sa maikli) |
Paggawa at pag-clone ng repository
| Command | Ano ang ginagawa |
|---|---|
git init | Gumagawa ng walang-lamang repository (folder na .git) sa kasalukuyang direktoryo |
git init my-project | Gumagawa ng folder na my-project at repository sa loob nito |
git clone https://github.com/user/repo.git | Kinokopya ang remote repository kasama ang buong history |
git clone git@github.com:user/repo.git app | Nagc-clone sa pamamagitan ng SSH sa folder na app |
git clone --depth 1 URL | Shallow clone: huling commit lang, mabilis at kaunting espasyo |
git clone -b develop URL | Nagc-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.
| Command | Ano ang ginagawa |
|---|---|
git status | Estado: mga binagong, naihandang, at hindi sinusubaybayang file |
git status -s | Maikling format: M ay binago, A ay idinagdag, ?? ay hindi sinusubaybayan |
git add file.txt | Idagdag ang file sa index |
git add . | Idagdag ang lahat ng pagbabago sa kasalukuyang direktoryo at sa ibaba nito, kasama ang mga pagbura |
git add -A | Idagdag ang lahat ng pagbabago sa buong repository |
git add -p | Interactive 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 --amend | Isulat muli ang huling commit: idagdag ang nakalimutan sa index o itama ang mensahe |
git commit --amend --no-edit | Dagdagan ang huling commit nang hindi binabago ang mensahe |
git rm file.txt | Burahin ang file sa disk at sa index |
git rm --cached secret.env | Itigil ang pagsubaybay sa file, pero nasa disk pa rin |
git mv old.js new.js | Palitan 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
| Command | Ano ang ginagawa |
|---|---|
git log | History ng mga commit sa kasalukuyang branch |
git log --oneline | Bawat commit sa isang linya: maikling hash at pamagat |
git log --oneline --graph --all | Graph ng lahat ng branch sa terminal |
git log -p file.txt | History 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..feature | Mga commit na nasa feature pero wala sa main |
git diff | Mga pagbabago sa working directory na hindi pa nasa index |
git diff --staged | Mga pagbabago sa index kumpara sa huling commit (kapareho ng --cached) |
git diff main feature | Pagkakaiba ng dulo ng dalawang branch |
git diff HEAD~3 -- src/ | Mga pagbabago sa folder na src sa nakaraang tatlong commit |
git show a1b2c3d | Metadata at diff ng isang partikular na commit |
git show HEAD:README.md | Nilalaman ng file sa huling commit |
git blame app.js | Sino at sa aling commit huling binago ang bawat linya |
git shortlog -sn | Bilang 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.
| Command | Ano ang ginagawa |
|---|---|
git branch | Listahan ng lokal na branch; minamarkahan ng * ang kasalukuyan |
git branch -a | Lokal at remote-tracking na branch |
git branch -vv | Mga branch kasama ang huling commit at kung ilang commit ang nahuhuli o nauuna sa upstream |
git branch feature/login | Gumawa ng branch nang hindi lumilipat |
git switch feature/login | Lumipat sa branch |
git switch -c feature/login | Gumawa ng branch at lumipat (katumbas ng git checkout -b) |
git switch - | Bumalik sa nakaraang branch |
git branch -m new-name | Palitan ang pangalan ng kasalukuyang branch |
git branch -d feature/login | Burahin ang branch kung na-merge na |
git branch -D feature/login | Puwersahang burahin ang branch, kahit hindi pa na-merge |
git branch --merged | Mga branch na na-merge na sa kasalukuyan; kandidato sa pagbura |
Merge at rebase
| Command | Ano ang ginagawa |
|---|---|
git merge feature | I-merge ang feature sa kasalukuyang branch (fast-forward kung posible) |
git merge --no-ff feature | Laging gumawa ng merge commit |
git merge --squash feature | Pagsamahin ang lahat ng pagbabago ng branch sa index bilang isang set, saka git commit |
git merge --abort | Kanselahin ang merge na may conflict at bumalik sa dating estado |
git rebase main | Ilipat ang mga commit ng kasalukuyang branch sa ibabaw ng main |
git rebase -i HEAD~4 | Interactive: pagsamahin (squash), palitan ang pangalan, ayusin ang pagkakasunod, o burahin ang huling 4 na commit |
git rebase --continue | Ipagpatuloy pagkatapos ayusin ang conflict |
git rebase --abort | Kanselahin nang buo ang rebase |
git cherry-pick a1b2c3d | Ilapat 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
| Command | Ano ang ginagawa |
|---|---|
git remote -v | Listahan ng mga remote at ng kanilang address |
git remote add origin git@github.com:user/repo.git | Ikabit ang remote repository sa pangalang origin |
git remote set-url origin NEW_URL | Palitan ang address ng remote (halimbawa mula HTTPS papuntang SSH) |
git remote remove upstream | Alisin ang remote |
git fetch | Kunin ang bagong commit at branch nang hindi ginagalaw ang mga file ninyo |
git fetch --prune | Kapareho ng nasa itaas, at burahin din ang mga reference sa branch na nabura na sa server |
git pull | git fetch + i-merge ang upstream na branch sa kasalukuyan |
git pull --rebase | git fetch + i-rebase ang mga commit ninyo sa ibabaw ng nakuha |
git push | Ipadala ang mga commit ng kasalukuyang branch sa upstream nito |
git push -u origin feature/login | Unang pagpapadala ng branch, kasabay ng pagtatakda ng upstream |
git push --force-with-lease | I-overwrite ang remote na branch, pero kung walang bagong commit doon mula sa iba |
git push origin --delete feature/login | Burahin ang branch sa server |
git push --tags | Ipadala 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?
| Sitwasyon | Command |
|---|---|
| I-undo ang mga pagbabago sa file (ibalik sa huling commit) | git restore app.js |
| Alisin ang file sa index, pero itira ang pagbabago | git restore --staged app.js |
| Ibalik ang file mula sa isang partikular na commit | git restore --source=a1b2c3d app.js |
| I-undo ang huling commit, itira ang pagbabago sa index | git reset --soft HEAD~1 |
| I-undo ang huling commit, itira ang pagbabago sa mga file | git reset HEAD~1 (mode na --mixed ang default) |
| Burahin ang huling commit at lahat ng pagbabago nito | git reset --hard HEAD~1 |
| I-undo ang na-publish na commit sa pamamagitan ng bagong "baligtad" na commit | git revert a1b2c3d |
| I-undo ang merge commit | git revert -m 1 <merge-hash> |
| Tingnan kung aling hindi sinusubaybayang file ang mabubura | git clean -n |
| Burahin ang hindi sinusubaybayang file at folder | git clean -fd |
| Hanapin ang "nawalang" commit pagkatapos ng reset o rebase | git 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
| Command | Ano ang ginagawa |
|---|---|
git stash | Itago 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 list | Listahan ng mga naitabing set: stash@{0}, stash@{1}… |
git stash show -p stash@{0} | Tingnan ang diff ng naitabing set |
git stash pop | Ibalik 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-form | Gumawa ng branch mula sa commit kung saan ginawa ang stash at ilapat ito |
Mga tag at release
| Command | Ano ang ginagawa |
|---|---|
git tag | Listahan 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 a1b2c3d | Magaang tag sa isang partikular na commit |
git push origin v1.2.0 | Ipadala ang isang tag |
git tag -d v1.2.0 | Burahin ang tag nang lokal |
git push origin --delete v1.2.0 | Burahin ang tag sa server |
git describe --tags | Pinakamalapit na tag at bilang ng commit pagkatapos nito, halimbawa v1.2.0-3-ga1b2c3d |
Mga advanced na command ng Git
| Command | Ano ang ginagawa |
|---|---|
git bisect start, git bisect bad, git bisect good v1.1.0 | Binary search para sa commit na nagpakilala ng bug; sa dulo, git bisect reset |
git worktree add ../hotfix main | Pangalawang working folder na may ibang branch mula sa iisang repository |
git submodule update --init --recursive | I-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.patch | I-save ang commit bilang patch at ilapat ang patch sa working directory |
git gc | I-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.
Detalyadong tinatalakay ang paksang ito, may praktis, sa kursong “Git с нуля до уверенного разработчика”.
- Первый репозиторий: init, add, commit и магия индекса
- Читаем историю: log, diff, show и навигация по прошлому
- Ветки: параллельная реальность вашего кода
- Отменяем ошибки: restore, reset, revert — правильно и опасно
- GitHub и удалённые репозитории: ваш код в облаке
- Продвинутые инструменты: rebase, stash, cherry-pick и теги