Amri za Git: karatasi ya haraka yenye mifano kwa kila siku
Amri muhimu za Git ni git init na git clone kwa kuunda repo, git status, git add na git commit kwa kuhifadhi mabadiliko, git branch, git switch na git merge kwa matawi, git push, git fetch na git pull kwa usawazishaji na seva, pamoja na git restore, git reset na git revert kwa kughairi mabadiliko.
Hapa chini ni karatasi ya kazi ya Git: amri zimepangwa kwa kazi, kila moja ikiwa na mfano na maelezo mafupi. Ni vizuri kuiweka wazi karibu na terminal: karibu kila kitu msanidi anachofanya na Git kwa siku kinatoshea katika amri 20 hadi 30 za majedwali haya.
Ili amri zisomeke kwa maana, kumbuka sehemu tatu: folda ya kazi (faili kwenye diski), index au staging area (kitakachoingia kwenye commit ijayo) na repo (historia ya commit kwenye folda .git). Amri nyingi za Git huhamisha mabadiliko kati ya sehemu hizi tatu, au kati ya repo ya ndani na ya mbali.
Usanidi wa Git
Amri hizi zinafanywa mara moja baada ya usakinishaji. Bendera --global huandika mipangilio kwenye ~/.gitconfig na inatumika kwa repo zote za mtumiaji; bila hiyo — kwa repo ya sasa tu.
| Amri | Inafanya nini |
|---|---|
git config --global user.name "Iman Petro" | Jina la mwandishi wa commit |
git config --global user.email "iman@example.com" | Barua pepe ya mwandishi wa commit |
git config --global init.defaultBranch main | Jina la tawi chaguo-msingi kwa repo mpya |
git config --global core.editor "code --wait" | Kihariri cha ujumbe wa commit (hapa VS Code) |
git config --global pull.rebase false | Tabia ya git pull kwa chaguo-msingi — kuunganisha |
git config --global core.autocrlf input | Kubadilisha CRLF kuwa LF wakati wa commit (macOS/Linux; kwenye Windows kwa kawaida true) |
git config --list --show-origin | Kuonyesha mipangilio yote na faili kila moja inatoka |
git config --global alias.st status | Alias: git st badala ya git status |
git --version | Toleo la Git lililosakinishwa |
git help commit | Msaada kamili wa amri (au git commit -h — fupi) |
Kuunda na kuclone repo
| Amri | Inafanya nini |
|---|---|
git init | Huunda repo tupu (folda .git) kwenye saraka ya sasa |
git init my-project | Huunda folda my-project na repo ndani yake |
git clone https://github.com/user/repo.git | Hunakili repo ya mbali pamoja na historia nzima |
git clone git@github.com:user/repo.git app | Huclone kwa SSH kwenye folda app |
git clone --depth 1 URL | Clone isiyo kamili: commit ya mwisho tu, haraka na nafasi ndogo |
git clone -b develop URL | Huclone na kubadili mara moja kwenye tawi develop |
Mzunguko wa msingi: status, add, commit
Hiki ndicho kiini cha kazi ya kila siku: angalia kilichobadilika, chagua kinachohitajika kwenye index na ukihifadhi kwa commit.
| Amri | Inafanya nini |
|---|---|
git status | Hali: faili zilizobadilika, zilizoandaliwa na zisizofuatiliwa |
git status -s | Muundo mfupi: M — imebadilika, A — imeongezwa, ?? — haifuatiliwi |
git add file.txt | Kuongeza faili kwenye index |
git add . | Kuongeza mabadiliko yote kwenye saraka ya sasa na chini yake, pamoja na ufutaji |
git add -A | Kuongeza mabadiliko yote kwenye repo nzima |
git add -p | Kuchagua vipande (hunks) vya mabadiliko kwa njia shirikishi |
git commit -m "Ongeza fomu ya kuingia" | Kuunda commit kutoka index yenye ujumbe |
git commit -am "Rekebisha herufi" | Kuweka kwenye index mabadiliko yote ya faili zinazofuatiliwa na kucommit; faili mpya hazitaingia |
git commit --amend | Kuandika upya commit ya mwisho: kuongeza kilichosahauliwa kutoka index au kurekebisha ujumbe |
git commit --amend --no-edit | Kuongeza kwenye commit ya mwisho bila kubadilisha ujumbe |
git rm file.txt | Kufuta faili kutoka diskini na kutoka index |
git rm --cached secret.env | Kuacha kufuatilia faili, ikibaki kwenye diski |
git mv old.js new.js | Kubadili jina au kuhamisha faili |
Mtiririko wa kawaida unaonekana hivi:
git status
git add src/login.js src/login.css
git diff --staged # hakiki kitakachoingia kwenye commit
git commit -m "Ongeza fomu ya kuingia"
Usitumie --amend kwa commit ambazo tayari zimetumwa kwenye tawi la pamoja: inaunda commit mpya yenye hash tofauti, na wenzako watalazimika kushughulikia tofauti ya historia.
Kuangalia historia na mabadiliko
| Amri | Inafanya nini |
|---|---|
git log | Historia ya commit za tawi la sasa |
git log --oneline | Kila commit kwa mstari mmoja: hash fupi na kichwa |
git log --oneline --graph --all | Grafu ya matawi yote kwenye terminal |
git log -p file.txt | Historia ya faili pamoja na diff ya kila commit |
git log --author="Iman" --since="2 weeks ago" | Kuchuja kwa mwandishi na tarehe |
git log -S "getUser" | Commit ambapo mstari getUser uliongezwa au kuondolewa |
git log main..feature | Commit zilizopo kwenye feature lakini hazipo kwenye main |
git diff | Mabadiliko kwenye folda ya kazi ambayo hayajawekwa kwenye index |
git diff --staged | Mabadiliko kwenye index ukilinganisha na commit ya mwisho (sawa na --cached) |
git diff main feature | Tofauti kati ya ncha za matawi mawili |
git diff HEAD~3 -- src/ | Mabadiliko kwenye folda src katika commit tatu za mwisho |
git show a1b2c3d | Metadata na diff ya commit fulani |
git show HEAD:README.md | Maudhui ya faili kwenye commit ya mwisho |
git blame app.js | Nani na katika commit ipi alibadilisha kila mstari mara ya mwisho |
git shortlog -sn | Idadi ya commit kwa mwandishi |
Marejeo ya commit yanahitajika kila mahali: HEAD — commit ya sasa, HEAD~1 — mzazi wake, HEAD~3 — hatua tatu nyuma kupitia mzazi wa kwanza, HEAD^2 — mzazi wa pili wa merge commit.
Matawi: kuunda, kubadili, kufuta
Tangu toleo 2.23 Git ina git switch kwa matawi na git restore kwa faili — zilitenganisha git checkout iliyojaa kazi nyingi. Mfumo wa zamani bado unafanya kazi.
| Amri | Inafanya nini |
|---|---|
git branch | Orodha ya matawi ya ndani; la sasa lina alama * |
git branch -a | Matawi ya ndani na ya mbali (remote-tracking) |
git branch -vv | Matawi pamoja na commit ya mwisho na kiasi cha kuwa nyuma/mbele ya upstream |
git branch feature/login | Kuunda tawi bila kubadili |
git switch feature/login | Kubadili kwenye tawi |
git switch -c feature/login | Kuunda tawi na kubadili (sawa na git checkout -b) |
git switch - | Kurudi kwenye tawi lililotangulia |
git branch -m new-name | Kubadili jina la tawi la sasa |
git branch -d feature/login | Kufuta tawi lililoshaunganishwa |
git branch -D feature/login | Kufuta tawi kwa nguvu, hata ambalo halijaunganishwa |
git branch --merged | Matawi yaliyoshaunganishwa kwenye la sasa — wagombea wa kufutwa |
Kuunganisha na kupanga upya
| Amri | Inafanya nini |
|---|---|
git merge feature | Kuunganisha feature kwenye tawi la sasa (fast-forward ikiwezekana) |
git merge --no-ff feature | Kuunda merge commit kila wakati |
git merge --squash feature | Kukusanya mabadiliko yote ya tawi kwenye index kwa pamoja, kisha git commit |
git merge --abort | Kughairi muunganisho wenye migongano na kurudi kwenye hali ya awali |
git rebase main | Kuhamisha commit za tawi la sasa juu ya main |
git rebase -i HEAD~4 | Kwa njia shirikishi: kuunganisha (squash), kubadili jina, kupanga upya, kufuta commit 4 za mwisho |
git rebase --continue | Kuendelea baada ya kutatua mgongano |
git rebase --abort | Kughairi rebase kikamilifu |
git cherry-pick a1b2c3d | Kutumia commit moja kwenye tawi la sasa kama commit mpya |
Kutatua mgongano wakati wa kuunganisha kwa kawaida kunafanana kila mara:
git merge feature
# CONFLICT (content): Merge conflict in app.js
git status # faili ziko kwenye sehemu ya "both modified"
# hariri app.js, ondoa alama <<<<<<< ======= >>>>>>>
git add app.js
git commit # Git itapendekeza ujumbe tayari wa merge commit
Kanuni kuu ya rebase: usipange upya commit ambazo tayari ziko kwenye tawi la pamoja na ambazo wengine wanajenga kazi yao juu yake.
Kazi na repo za mbali
| Amri | Inafanya nini |
|---|---|
git remote -v | Orodha ya remote na anwani zao |
git remote add origin git@github.com:user/repo.git | Kuunganisha repo ya mbali kwa jina origin |
git remote set-url origin NEW_URL | Kubadilisha anwani ya remote (kwa mfano kutoka HTTPS kwenda SSH) |
git remote remove upstream | Kukata remote |
git fetch | Kupakua commit na matawi mapya bila kugusa faili zako |
git fetch --prune | Sawa na hapo, pamoja na kufuta marejeo ya matawi yaliyofutwa kwenye seva |
git pull | git fetch + kuunganisha tawi la upstream kwenye la sasa |
git pull --rebase | git fetch + rebase commit zako juu ya zilizopokelewa |
git push | Kutuma commit za tawi la sasa kwenye upstream yake |
git push -u origin feature/login | Kutuma tawi kwa mara ya kwanza na kuweka upstream |
git push --force-with-lease | Kuandika juu ya tawi la mbali, ikiwa hakuna commit mpya za watu wengine |
git push origin --delete feature/login | Kufuta tawi kwenye seva |
git push --tags | Kutuma tag zote za ndani |
Badala ya git push --force, zoea --force-with-lease: ikiwa mwenzako ametuma kitu kwenye tawi lilelile, amri itakataa kuandika juu ya kazi yake.
Kughairi mabadiliko
Hii ndiyo sehemu yenye wasiwasi zaidi ya Git. Swali muhimu kabla ya kuchagua amri: mabadiliko yako bado kwenye faili tu, tayari kwenye index, kwenye commit ya ndani, au kwenye commit iliyochapishwa?
| Hali | Amri |
|---|---|
| Kughairi mabadiliko kwenye faili (kurudi kama ilivyo kwenye commit ya mwisho) | git restore app.js |
| Kuondoa faili kwenye index, mabadiliko yakibaki | git restore --staged app.js |
| Kurudisha faili kutoka commit fulani | git restore --source=a1b2c3d app.js |
| Kughairi commit ya mwisho, mabadiliko yakibaki kwenye index | git reset --soft HEAD~1 |
| Kughairi commit ya mwisho, mabadiliko yakibaki kwenye faili | git reset HEAD~1 (hali --mixed ya chaguo-msingi) |
| Kufuta commit ya mwisho pamoja na mabadiliko yake yote | git reset --hard HEAD~1 |
| Kughairi commit iliyochapishwa kwa commit mpya ya kinyume | git revert a1b2c3d |
| Kughairi merge commit | git revert -m 1 <merge-hash> |
| Kuona faili zisizofuatiliwa zitakazofutwa | git clean -n |
| Kufuta faili na folda zisizofuatiliwa | git clean -fd |
| Kupata commit «iliyopotea» baada ya reset au rebase | git reflog, kisha git reset --hard HEAD@{2} |
git reset --hard na git clean -f hufuta kwa kudumu mabadiliko ambayo hayajacommitiwa: reflog inahifadhi commit tu, si marekebisho ya folda ya kazi. Kabla yake fanya git stash au angalau git status.
Stash: kuweka kazi isiyokamilika kando
| Amri | Inafanya nini |
|---|---|
git stash | Kuficha mabadiliko ya faili zinazofuatiliwa na kusafisha folda ya kazi |
git stash push -u -m "wip: fomu" | Kuficha pamoja na faili zisizofuatiliwa, kwa jina |
git stash list | Orodha ya seti zilizofichwa: stash@{0}, stash@{1}… |
git stash show -p stash@{0} | Kuona diff ya seti iliyofichwa |
git stash pop | Kurudisha seti ya mwisho na kuiondoa kwenye orodha |
git stash apply stash@{1} | Kurudisha seti na kuibakisha kwenye orodha |
git stash drop stash@{1} | Kufuta seti moja |
git stash branch fix-form | Kuunda tawi kutoka commit ambapo stash ilifanyika na kuitumia |
Tag na matoleo
| Amri | Inafanya nini |
|---|---|
git tag | Orodha ya tag |
git tag -a v1.2.0 -m "Toleo 1.2.0" | Tag ya maelezo yenye mwandishi, tarehe na ujumbe |
git tag v1.2.0 a1b2c3d | Tag nyepesi kwenye commit fulani |
git push origin v1.2.0 | Kutuma tag moja |
git tag -d v1.2.0 | Kufuta tag kwenye kompyuta yako |
git push origin --delete v1.2.0 | Kufuta tag kwenye seva |
git describe --tags | Tag ya karibu na idadi ya commit baada yake, kwa mfano v1.2.0-3-ga1b2c3d |
Amri za hali ya juu
| Amri | Inafanya nini |
|---|---|
git bisect start, git bisect bad, git bisect good v1.1.0 | Utafutaji wa mgawanyo kwa commit iliyoleta hitilafu; mwishoni git bisect reset |
git worktree add ../hotfix main | Folda ya pili ya kazi yenye tawi tofauti kutoka repo ileile |
git submodule update --init --recursive | Kupakua submodules baada ya clone |
git grep "TODO" | Utafutaji wa haraka kwenye faili zinazofuatiliwa |
git format-patch -1 HEAD / git apply fix.patch | Kuhifadhi commit kama patch na kuitumia kwenye folda ya kazi |
git gc | Kukandamiza vitu na kusafisha repo (kwa kawaida Git hufanya hivi yenyewe) |
Makosa ya kawaida na jinsi ya kuyarekebisha
Umecommit kwenye main badala ya tawi jipya
Ikiwa commit bado haijatumwa, unda tawi kwenye commit ya sasa na urudishe main nyuma:
git branch feature/login # tawi linaelekeza kwenye commit yako
git reset --hard HEAD~1 # main inarudi hatua moja nyuma
git switch feature/login
Umesahau kuongeza faili kwenye commit ya mwisho
git add forgotten.js
git commit --amend --no-edit
Push imekataliwa: rejected, non-fast-forward
Kwenye seva kuna commit ambazo huna. Kwanza zichukue, kisha tuma:
git pull --rebase
git push
Umecommit kwa bahati faili yenye nywila
Iondoe kwenye ufuatiliaji na uiongeze kwenye .gitignore: git rm --cached .env, kisha commit. Ikiwa commit tayari imetumwa, chukulia siri hiyo kuwa imevuja na itengeneze upya — haijatoweka kutoka kwenye historia.
Hitimisho
Kwa kazi ya kila siku seti fupi inatosha: status, add, commit, switch, merge, pull, push na log --oneline. Amri za kughairi — restore, reset, revert — chagua kulingana na kama commit imechapishwa, na kumbuka reflog kama wavu wa mwisho. Amri zote za Git kutoka karatasi hii zinafundishwa kwa vitendo katika kozi ya Git, ambapo kila moja unaijaribu kwenye repo yako mwenyewe.
Maswali ya mara kwa mara
Mwanzaji anahitaji kujua amri ngapi za Git?
Kwa kuanzia 10 hadi 12 zinatosha: init, clone, status, add, commit, log, diff, branch, switch, merge, pull na push. Zilizobaki zinajifunza kadiri kazi zinavyojitokeza.
git switch inatofautianaje na git checkout?
git switch inaweza tu kubadili na kuunda matawi, wakati git checkout pia hurejesha faili. Kutenganisha switch na restore kulifanywa ili kuzuia kufuta mabadiliko kwa bahati mbaya kwa kuchanganya tawi na faili.
Ninawezaje kuona msaada wa amri yoyote ya Git?
Endesha git help jina-la-amri kwa mwongozo kamili au git jina-la-amri -h kwa orodha fupi ya bendera. Nyaraka hizo hizo zipo git-scm.com.
Je, inawezekana kufupisha amri ndefu za Git?
Ndiyo, kwa alias: git config --global alias.lg "log --oneline --graph --all" inakuwezesha kuandika git lg.
Amri hizi zinafanya kazi kwenye Windows?
Ndiyo, amri ni zilezile kwenye mifumo yote. Kwenye Windows ni rahisi kuziendesha kwenye Git Bash, PowerShell au terminal ya kihariri cha msimbo.
Mada hii inafundishwa kwa kina pamoja na mazoezi katika kozi “Git kutoka mwanzo hadi msanidi programu anayejiweza”.
- Hazina ya Kwanza: init, add, commit na uchawi wa faharasa
- Kusoma Historia: log, diff, show na Urambazaji wa Nyuma
- Matawi: Uhalisia Sambamba wa Msimbo Wako
- Kufuta Makosa kwa Usahihi: restore, reset, revert — sahihi na hatari
- GitHub na Hifadhi za Mbali: Msimbo Wako Hewani
- Zana za Kina: Rebase, Stash, Cherry-Pick na Lebo