🐙 Git na GitHub CLI
Amri za msingi na za hali ya juu za Git kwa udhibiti wa toleo, matawi, repos za mbali, stash, tagi na GitHub CLI.
🔹 Amri za Msingi
| Amri | Mfano | Maelezo | 
|---|---|---|
| git add | Ongeza faili kwenye eneo la staging | |
| git add file.txt | Ongeza faili maalum kwa commit inayofuata | |
| git add . | Ongeza mabadiliko yote kwenye saraka ya sasa na chini yake | |
| git add -p | Chagua sehemu za faili kuongeza kwa njia ya mwingiliano (inasaidia kwa partial commits) | |
| git clone | Nakili repository kwenye saraka mpya | |
| git clone -b branch_name URL | Nakili tawi maalum pekee (badala ya default) | |
| git clone --depth 1 URL | Nakili commit ya hivi karibuni pekee, ikifanya nakala ndogo ili kuokoa muda na nafasi | |
| git commit | Hifadhi mabadiliko kwenye repository | |
| git commit -m "Initial commit" | Fanya commit na ujumbe bila kufungua mhariri | |
| git commit -a -m "Fix bugs" | Ongeza na commit faili zote zilizobadilishwa zilizofuatiliwa na ujumbe | |
| git commit --amend | Sasisha commit ya mwisho (badilisha ujumbe au ongeza mabadiliko zaidi) | |
| git commit --fixup abc1234 | Unda commit ya fixup ili kuunganishwa kiotomatiki baadaye wakati wa interactive rebase | |
| git config | Pata na weka chaguo za repository au za kimataifa | |
| git config --global user.name "Name" | Weka jina la Git la kimataifa | |
| git config --global user.email "email@example.com" | Weka barua pepe ya Git ya kimataifa | |
| git config --list | Orodhesha mipangilio yote ya Git (jina, barua pepe, mhariri, nk.) | |
| git diff | Onyesha mabadiliko kati ya commits, commit na working tree, nk. | |
| git diff HEAD | Onyesha ulichobadilisha tangu commit ya mwisho (mabadiliko yasiyo staged) | |
| git diff --staged | Onyesha yatakayojumuishwa kwenye commit inayofuata | |
| git diff --word-diff HEAD~1 | Onyesha mabadiliko kwa tofauti za kiwango cha maneno | |
| git grep | Tafuta ndani ya faili za repository | |
| git grep "functionName" | Pata marejeo yote ya  | |
| git grep -n "TODO" | Pata mistari yenye  | |
| git grep -i "login" | Tafuta neno  | |
| git init | Unda repository tupu ya Git au anza upya iliyopo | |
| git init my-project | Anzisha repo mpya kwenye saraka my-project | |
| git init --bare | Anzisha repository ya bare | |
| git log | Onyesha commit logs | |
| git log --oneline | Onyesha historia ya commit kwa muundo wa mstari mmoja | |
| git log --graph --all | Onyesha matawi yote kwenye grafu ya commits | |
| git log -p --stat | Onyesha patch na stats za mabadiliko ya faili kwa commits | |
| git reset | Ondoa faili kutoka staging, ukihifadhi mabadiliko kwenye working directory | |
| git reset HEAD file.txt | Ondoa faili kutoka staging (inahifadhi uhariri wako) | |
| git reset --hard HEAD~1 | Rudi commit moja nyuma na ufute mabadiliko yote (hatarishi!) | |
| git reset --soft HEAD~1 | Futa commit ya mwisho lakini hifadhi mabadiliko tayari kwa commit tena | |
| git reset --mixed HEAD~1 | Futa commit lakini hifadhi mabadiliko yasiyo staged kwenye working directory | |
| git show | Onyesha aina mbalimbali za vitu | |
| git show <commit_hash> | Onyesha mabadiliko na ujumbe wa commit maalum | |
| git show HEAD~1 | Onyesha commit iliyopita kabla ya ya sasa | |
| git show --stat | Onyesha muhtasari wa mabadiliko ya faili kwa commit ya hivi karibuni | |
| git status | Onyesha hali ya working tree | |
| git status -s | Onyesha hali kwa muundo mfupi | |
| git status -b | Onyesha tawi la sasa na hali ya faili | 
🌿 Matawi na Kuunganisha
| Amri | Mfano | Maelezo | 
|---|---|---|
| git branch | Unda, orodhesha au futa matawi | |
| git branch new-feature | Unda tawi jipya linaloitwa  | |
| git branch -d old-feature | Futa tawi la ndani linaloitwa  | |
| git checkout | Badilisha matawi au rejesha faili kutoka commit nyingine | |
| git checkout main | Badilisha hadi tawi  | |
| git checkout -b new-branch | Unda na ubadilishe hadi tawi jipya linaloitwa  | |
| git switch | Badilisha matawi (mbadala rahisi kwa checkout) | |
| git switch main | Badilisha hadi tawi  | |
| git switch -c feature-x | Unda na ubadilishe hadi tawi jipya linaloitwa  | |
| git switch new-feature | Badilisha hadi tawi lililopo linaloitwa  | |
| git merge | Unganisha mabadiliko kutoka tawi jingine hadi lile la sasa | |
| git merge new-feature | Unganisha tawi  | |
| git merge --no-ff new-feature | Daima unda merge commit (hata kama fast-forward inawezekana) | |
| git merge --abort | Ghairi merge na rudisha mabadiliko ikiwa migongano itatokea | |
| git rebase | Hamisha au rudia commits juu ya commit mpya ya msingi | |
| git rebase main | Rudia commits za tawi lako juu ya tawi  | |
| git rebase -i HEAD~3 | Hariri commits 3 za mwisho kwa njia ya interactive | |
| git rebase --abort | Simamisha na futa rebase inayoendelea | |
| git rebase -i --autosquash HEAD~5 | Unganisha commits zilizowekwa alama kama fixup au squash wakati wa interactive rebase | |
| git cherry-pick | Tumia commits maalum kutoka tawi jingine | |
| git cherry-pick <hash> | Tumia commit maalum (kwa hash) kwenye tawi la sasa | |
| git cherry-pick --continue | Endelea cherry-pick baada ya kutatua migongano | |
| git cherry-pick A^..B | Tumia safu ya commits kutoka  | 
📡 Repositories za Mbali
| Amri | Mfano | Maelezo | 
|---|---|---|
| git remote | Simamia viungo kwa repositories za mbali (mfano GitHub) | |
| git remote -v | Onyesha majina ya remote na URL zao | |
| git remote add origin URL | Ongeza repository ya mbali iitwayo  | |
| git pull | Pakua na unganisha mabadiliko kiotomatiki kutoka tawi la mbali | |
| git pull origin main | Pakua na unganisha mabadiliko kutoka tawi  | |
| git pull --rebase origin main | Pakua na rebase tawi lako juu ya tawi la mbali badala ya kuunganisha | |
| git push | Pakia mabadiliko yako ya ndani hadi repository ya mbali | |
| git push origin main | Push tawi lako  | |
| git fetch | Pakua mabadiliko kutoka mbali bila kuunganisha | |
| git fetch origin | Pakua masasisho yote kutoka remote  | |
| git fetch origin main | Pakua tawi  | |
| git fetch --all | Pakua masasisho kutoka kwa remotes zote | |
| git fetch --prune | Safisha matawi yaliyofutwa — ondoa marejeo ya ndani kwa matawi yaliyofutwa mbali | |
| git fetch --dry-run | Onyesha kitakachopakuliwa bila kupakua chochote | |
| git fetch origin +main | Sasisha kwa nguvu tawi lako la kufuatilia ( | 
📦 Stash na Usafishaji
| Amri | Mfano | Maelezo | 
|---|---|---|
| git stash | Hifadhi kwa muda mabadiliko yasiyocommitiwa (kazi inayoendelea) | |
| git stash | Hifadhi faili zilizobadilishwa na staged, kisha rudisha working directory hadi commit ya mwisho | |
| git stash apply | Tumia tena stash ya hivi karibuni (stash inabaki imehifadhiwa) | |
| git stash pop | Tumia tena na uondoe stash ya hivi karibuni | |
| git stash list | Onyesha orodha ya stash zote | |
| git stash branch feature-fix | Unda tawi jipya na tumia stash ya hivi karibuni ndani yake | |
| git clean | Futa faili zisizofuatiliwa kabisa (sio sehemu ya Git) | |
| git clean -f | Futa faili zisizofuatiliwa kwenye saraka ya sasa | |
| git clean -fd | Futa faili na folda zisizofuatiliwa | |
| git clean -n | Onyesha itakayofutwa (dry run salama) | 
🏷️ Tagi
| Amri | Mfano | Maelezo | 
|---|---|---|
| git tag | Unda, orodhesha au futa tagi ili kuweka alama sehemu maalum za historia (mfano matoleo) | |
| git tag -a v1.0 -m "Version 1.0" | Unda tagi yenye maelezo iitwayo  | |
| git tag -d v1.0 | Futa tagi ya ndani iitwayo  | |
| git push | Pakia commits, matawi na tagi kutoka ndani hadi repository ya mbali | |
| git push origin --tags | Push tagi zote za ndani hadi remote (inasaidia baada ya kuweka matoleo mengi) | |
| git push origin v1.0 | Push tagi maalum (mf.  | |
| git push origin :refs/tags/v1.0 | Futa tagi ya mbali  | 
🛠️ Utatuzi wa Migongano
| Amri | Mfano | Maelezo | 
|---|---|---|
| git mergetool | Fungua zana ya kuona kusaidia kutatua migongano ya merge | |
| git mergetool --tool=meld | Tumia zana maalum ya merge (mfano Meld) kurekebisha migongano | |
| git rerere | Acha Git ikumbuke jinsi ulivyotatua migongano hapo awali | |
| git config --global rerere.enabled true | Wezesha utumiaji wa kiotomatiki wa suluhisho za migongano zilizopita | |
| git rerere status | Onyesha ni faili zipi zina suluhisho zilizohifadhiwa | |
| git rerere diff | Onyesha mabadiliko ambayo Git imehifadhi kwa matumizi ya baadaye | 
⚙️ Amri za Kina
| Amri | Mfano | Maelezo | 
|---|---|---|
| git bisect | Tumia binary search kupata commit iliyoleta hitilafu | |
| git bisect start | Anza binary search kati ya commit nzuri na mbaya ili kupata bug | |
| git bisect bad | Weka alama commit ya sasa kama “mbaya” (ina bug) | |
| git bisect good <commit> | Weka alama commit inayojulikana kama “nzuri” ambapo bug haikuwepo | |
| git blame | Onyesha nani alibadilisha kila mstari wa faili, na revision na mwandishi | |
| git blame file.txt | Onyesha mwandishi na commit info kwa kila mstari kwenye faili | |
| git blame -L 10,20 file.txt | Onyesha blame info kwa mistari 10 hadi 20 pekee | |
| git blame --show-email file.txt | Onyesha barua pepe za waandishi kando ya mabadiliko ya mistari | |
| git reflog | Tazama na simamia reference log (reflog) ya harakati za matawi na HEAD | |
| git reflog show main@{1.week.ago} | Angalia pale ambapo tawi  | |
| git reflog expire --expire=30.days --dry-run | Onyesha ni reflog entries zipi zilizo zaidi ya siku 30 zinaweza kusafishwa (hakuna mabadiliko yaliyofanywa) | |
| git reflog delete HEAD@{2} | Futa reflog entry maalum (tumia kwa uangalifu, inaweza kuathiri recovery) | |
| git submodule | Ongeza, anzisha, sasisha, au kagua submodules (repositories ndani ya repositories) | |
| git submodule add URL path | Ongeza repository ya nje kama submodule kwenye njia maalum | |
| git submodule update --init | Anzisha na pakua submodules zote zilizoorodheshwa kwenye repository | |
| git submodule foreach git pull | Endesha  | |
| git submodule sync --recursive | Linganishwa URLs za submodule baada ya mabadiliko kwenye faili  | |
| git submodule update --remote --merge | Sasisha submodules hadi commit ya hivi karibuni kutoka matawi yao ya mbali | |
| git archive | Unda archive (zip, tar, nk.) ya faili kutoka commit au tawi maalum | |
| git archive --format=zip HEAD > archive.zip | Unda archive ya ZIP ya faili za mradi kwa HEAD | |
| git archive -o release.tar.gz HEAD | Unda archive ya  | |
| git archive --format=tar --prefix=project/ HEAD \| gzip > project.tar.gz | Unda archive ya  | |
| git gc | Safisha faili zisizohitajika na boresha repository kwa utendaji | |
| git gc --aggressive | Fanya usafishaji na uboreshaji wa kina (unaweza kuwa mrefu lakini ni bora) | |
| git gc --prune=now | Ondoa vitu visivyofikika mara moja (hatarishi ukikosa uhakika) | |
| git shortlog | Muhtasari wa haraka wa waandishi na commits zao | |
| git shortlog -e | Onyesha orodha ya waandishi na barua pepe zao (mf. kuchambua nani alichangia na kiasi gani) | |
| git shortlog -s -n | Onyesha commits ngapi kila mwandishi alifanya, zikiorodheshwa kwa idadi | |
| git shortlog -sne | Sawa na hapo juu, lakini pia ni pamoja na majina na barua pepe — inasaidia kwa ufuatiliaji wa kina wa shughuli | |
| git revert | Unda commit mpya inayofuta mabadiliko kutoka commit ya awali bila kuandika upya historia | |
| git revert HEAD | Futa commit ya mwisho kwa kuunda commit mpya inayopindua mabadiliko yake | |
| git revert <commit_hash> | Futa commit maalum kwa hash, ukiongeza commit mpya inayopindua hiyo salama | 
🐙 GitHub CLI
ghhukuruhusu kusimamia GitHub kutoka terminal.
| Amri | Mfano | Maelezo | 
|---|---|---|
| gh auth login | Thibitisha na mwenyeji wa GitHub kuruhusu amri za CLI kuingiliana na akaunti yako | |
| gh auth login --with-token < mytoken.txt | Thibitisha ukitumia personal access token iliyohifadhiwa kwenye faili ( | |
| gh auth login --hostname enterprise.internal | Thibitisha kwa seva ya GitHub Enterprise (sio github.com) | |
| gh repo clone | Nakili repository ya GitHub kwenye mashine yako ya ndani | |
| gh repo clone user/repo | Nakili repository  | |
| gh repo clone cli/cli -- --depth=1 | Nakili repository lakini pakua commit ya hivi karibuni pekee kwa nakala ndogo na ya haraka | |
| gh repo clone cli/cli workspace/cli | Nakili repository kwenye folda maalum  | |
| gh issue list | Orodhesha masuala (issues) kwenye repository ya GitHub, ukiweza kuchuja kwa vigezo mbalimbali | |
| gh issue list --assignee "@me" | Orodhesha masuala yaliyokabidhiwa kwako | |
| gh issue list --state all | Orodhesha masuala bila kujali hali (wazi au yamefungwa) | |
| gh issue list --search "error no:assignee sort:created-asc" | Orodhesha masuala yanayolingana na “error”, yasiyokabidhiwa, yaliyopangwa kwa tarehe ya kuundwa kupanda | |
| gh pr create | Unda pull request kwenye GitHub kupitia CLI | |
| gh pr create --title "..." | Unda pull request yenye kichwa kilichotolewa | |
| gh pr create --project "Roadmap" | Unganisha pull request na mradi wa GitHub uitwao “Roadmap” | |
| gh pr create --base develop --head monalisa:feature | Unda PR kutoka tawi  | |
| gh repo create | Unda repository mpya ya GitHub kutoka CLI | |
| gh repo create my-project | Unda repository mpya iitwayo  | |
| gh repo create my-project --public --clone | Unda repository ya umma na uiweke nakala ndani | |
| gh repo create my-project --private --source=. --remote=upstream | Unda repo ya mbali ya kibinafsi kutoka folda ya sasa na ongeza remote iitwayo  | 
💡 Aliasi za Git (Njia Fupi Muhimu)
Sanidi aliasi rahisi ili kuharakisha amri za kawaida za Git:
git config --global alias.br branch                                       # njia ya mkato kwa: git branch
git config --global alias.ci commit                                       # njia ya mkato kwa: git commit
git config --global alias.co checkout                                     # njia ya mkato kwa: git checkout
git config --global alias.graph "log --oneline --graph --all --decorate"  # grafu nzuri ya historia
git config --global alias.last "log -1 HEAD"                              # onyesha commit ya mwisho
git config --global alias.st status                                       # njia ya mkato kwa: git status🚀 Amri za Kina za Git kwa Wataalamu
| Amri | Mfano | Maelezo | 
|---|---|---|
| git filter-repo | Chombo chenye nguvu na kasi kwa kuandika upya historia ya Git ili kuondoa au kurekebisha faili, uandishi, au njia; kinachobadilisha git filter-branch kwa kasi na usalama bora | |
| git filter-repo --path secret.txt --invert-paths | Andika upya historia ya repository ili kuondoa faili au saraka nyeti bila matatizo ya utendaji ya  | |
| git filter-repo --replace-text replacements.txt | Badilisha kwa wingi mistari au mifumo kote kwenye historia (mfano, kusafisha credentials) | |
| git filter-repo --subdirectory-filter src | Toa historia ya subdirectory ndani ya repository mpya, ukihifadhi metadata ya commit | |
| git worktree | Simamia saraka nyingi za kazi zilizounganishwa kwenye repository moja, kuruhusu kufanya kazi sambamba kwenye matawi tofauti bila cloning | |
| git worktree add ../feature feature-branch | Unda worktree ya ziada iliyoambatanishwa na repository ile ile, ikiruhusu checkouts za matawi sambamba bila clones | |
| git worktree list | Orodhesha worktree zote zinazotumika, njia zao na matawi husika | |
| git worktree remove ../feature | Ondoa worktree iliyounganishwa ikiwa haihitajiki tena, kusafisha saraka za kazi kwa usalama | |
| git replace | Unda marejeleo ya muda yanayobadilisha vitu vilivyopo, ukiruhusu urekebishaji wa historia wa ndani bila kuharibu na kwa madhumuni ya majaribio | |
| git replace <old_commit> <new_commit> | Badilisha commit moja kwa nyingine kwa muda kwenye repo yako ya ndani, inasaidia kwa majaribio bila kuandika upya historia | |
| git replace --list | Onyesha replacement refs zote zinazotumika | |
| git replace -d <replace_ref> | Futa replacement ref maalum kurejesha tabia ya awali | |
| git stash | Hifadhi kwa muda mabadiliko yasiyocommitiwa kwenye stack, ukiruhusu kubadilisha muktadha bila kufanya commit ya kazi isiyokamilika | |
| git stash push -p | Chagua hunks za mabadiliko kwa mwingiliano ili kuweka stash, ukitoa udhibiti wa kina | |
| git stash push -m "WIP selective stash" | Unda stash yenye ujumbe maalum kwa utambulisho rahisi | |
| git stash apply stash@{2} | Tumia stash maalum kutoka orodha ya stash bila kuifuta | |
| git rebase | Rudia commits juu ya base mpya, kurahisisha historia safi, linear na kuhariri historia kwa interactive | |
| git rebase --interactive --autosquash | Anza interactive rebase inayopanga upya na kuunganisha commits zilizowekwa alama kama fixup au squash | |
| git rebase -i --autosquash HEAD~10 | Panga upya na unganisha commits zilizowekwa fixup/squash, kusafisha historia kabla ya push | |
| git commit --fixup <commit> | Unda commit ya fixup itakayounganishwa kiotomatiki wakati wa interactive rebase | |
| git commit --squash <commit> | Unda commit ya squash kuunganishwa na commit maalum kwenye rebase | |
| git bisect | Chombo cha binary search kutambua commit iliyosababisha bug kwa kujaribu commits kwa mpangilio na kupunguza mabadiliko yenye kosa | |
| git bisect run | Otomatisha mchakato wa bisect kwa kuendesha script ya majaribio kwenye kila commit ili kupata bug haraka | |
| git bisect start; git bisect bad; git bisect good v1.0; git bisect run ./test.sh | Otomatisha bisection kwa script, ikiharakisha sana utambuzi wa bug | |
| git bisect visualize | Fungua chombo cha kuona kuonyesha mchakato wa bisection | |
| git bisect reset | Toka hali ya bisect na urudi kwenye HEAD ya awali | |
| git commit | Hifadhi mabadiliko kwenye repository na chaguo za kina kwa amend, sign, fixup, na urekebishaji wa ujumbe kudumisha historia safi ya mradi | |
| git commit --gpg-sign | Unda commit iliyosainiwa kwa GPG yako kuhakikisha uthibitisho wa cryptographic wa uhalisi | |
| git commit -S -m "Signed commit" | Saini commits zako kwa GPG yako, kuhakikisha uadilifu na uthibitisho wa uandishi | |
| git config --global user.signingkey <key_id> | Sanidi ufunguo wa GPG unaotumika kusaini commits kimataifa | |
| git log --show-signature | Thibitisha na onyesha taarifa ya saini za GPG kwa commits | |
| git reflog | Hifadhi logi ya masasisho kwa HEAD na matawi, muhimu kwa kurejesha commits zilizopotea na kuelewa historia ya ndani | |
| git reset --hard HEAD@{3} | Weka upya tawi la sasa kwa hali ya awali kutoka reflog ili kurejesha au kufuta mabadiliko | |
| git reflog expire --expire=now --all | Futa mara moja entries zote za reflog, kusafisha historia ya reflog (tumia kwa uangalifu) | 
🧰 Vidokezo vya Kitaalamu vya Mtiririko wa Kazi na Otomatisi
| Mada | Amri / Mfano | Maelezo & Vidokezo vya Pro | 
|---|---|---|
| Usafishaji Mkali wa Repo | git gc --aggressive --prune=now | Hufanya garbage collection ya kina na hukata vitu visivyofikika mara moja kwa uboreshaji wa repo. Tumia wakati wa matengenezo | 
| Worktrees Sambamba za Matawi | git worktree add ../feature-branch feature | Hifadhi worktrees nyingi kwa maendeleo ya vipengele sambamba, huepuka mzigo wa clone | 
| Historia Safi, Linear | git rebase -i --autosquash | Kabla ya kupush, fanya rebase kwa interactive na autosquash kudumisha historia safi na rahisi kusomeka | 
| Commits Salama | git commit -S | Saini commits na GPG kuongeza uaminifu kwenye repos zilizoshirikiwa, ni lazima katika mazingira mengi ya biashara | 
| Bisect Otomatiki | git bisect run ./test-script.sh | Otomatisha utafutaji wa bug kwa kuendesha script ya majaribio kwenye kila commit wakati wa bisect | 
| Kumbukumbu ya Migongano | git config --global rerere.enabled true | Wezesha utumiaji tena wa suluhisho za migongano ili kuharakisha utatuzi wa migongano inayojirudia kwenye rebases au merges | 
| Aliasi na Hooks za Pamoja | Hifadhi aliasi za Git na commit hooks kwenye repo ya pamoja au pipeline ya CI kutekeleza viwango vya timu na kuboresha tija | 
Rasilimali za Ziada
🧠 Kidokezo
Usijaribu kukumbuka kila kitu. Tumia --help, chunguza, na fanya mazoezi mara kwa mara:
git help <command>
git status🌐 Viungo Muhimu
📘 Nyaraka Rasmi za Git — mwongozo wa kina kwa amri zote za Git:
https://git-scm.com/docs
📙 Jifunze Git Branching — mafunzo ya kuona kwa interactive kudhibiti matawi:
https://learngitbranching.js.org
📕 Kitabu cha Pro Git (bure, na Scott Chacon & Ben Straub):
https://git-scm.com/book
📗 Git Cheatsheet (muhtasari rasmi wa haraka):
https://education.github.com/git-cheat-sheet-education.pdf