Karatasi ya kumbukumbu

Amri za Git: karatasi ya haraka yenye mifano kwa kila siku

Imesasishwa: · Skillaria.Top

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.

AmriInafanya 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 mainJina 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 falseTabia ya git pull kwa chaguo-msingi — kuunganisha
git config --global core.autocrlf inputKubadilisha CRLF kuwa LF wakati wa commit (macOS/Linux; kwenye Windows kwa kawaida true)
git config --list --show-originKuonyesha mipangilio yote na faili kila moja inatoka
git config --global alias.st statusAlias: git st badala ya git status
git --versionToleo la Git lililosakinishwa
git help commitMsaada kamili wa amri (au git commit -h — fupi)

Kuunda na kuclone repo

AmriInafanya nini
git initHuunda repo tupu (folda .git) kwenye saraka ya sasa
git init my-projectHuunda folda my-project na repo ndani yake
git clone https://github.com/user/repo.gitHunakili repo ya mbali pamoja na historia nzima
git clone git@github.com:user/repo.git appHuclone kwa SSH kwenye folda app
git clone --depth 1 URLClone isiyo kamili: commit ya mwisho tu, haraka na nafasi ndogo
git clone -b develop URLHuclone 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.

AmriInafanya nini
git statusHali: faili zilizobadilika, zilizoandaliwa na zisizofuatiliwa
git status -sMuundo mfupi: M — imebadilika, A — imeongezwa, ?? — haifuatiliwi
git add file.txtKuongeza faili kwenye index
git add .Kuongeza mabadiliko yote kwenye saraka ya sasa na chini yake, pamoja na ufutaji
git add -AKuongeza mabadiliko yote kwenye repo nzima
git add -pKuchagua 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 --amendKuandika upya commit ya mwisho: kuongeza kilichosahauliwa kutoka index au kurekebisha ujumbe
git commit --amend --no-editKuongeza kwenye commit ya mwisho bila kubadilisha ujumbe
git rm file.txtKufuta faili kutoka diskini na kutoka index
git rm --cached secret.envKuacha kufuatilia faili, ikibaki kwenye diski
git mv old.js new.jsKubadili 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

AmriInafanya nini
git logHistoria ya commit za tawi la sasa
git log --onelineKila commit kwa mstari mmoja: hash fupi na kichwa
git log --oneline --graph --allGrafu ya matawi yote kwenye terminal
git log -p file.txtHistoria 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..featureCommit zilizopo kwenye feature lakini hazipo kwenye main
git diffMabadiliko kwenye folda ya kazi ambayo hayajawekwa kwenye index
git diff --stagedMabadiliko kwenye index ukilinganisha na commit ya mwisho (sawa na --cached)
git diff main featureTofauti kati ya ncha za matawi mawili
git diff HEAD~3 -- src/Mabadiliko kwenye folda src katika commit tatu za mwisho
git show a1b2c3dMetadata na diff ya commit fulani
git show HEAD:README.mdMaudhui ya faili kwenye commit ya mwisho
git blame app.jsNani na katika commit ipi alibadilisha kila mstari mara ya mwisho
git shortlog -snIdadi 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.

AmriInafanya nini
git branchOrodha ya matawi ya ndani; la sasa lina alama *
git branch -aMatawi ya ndani na ya mbali (remote-tracking)
git branch -vvMatawi pamoja na commit ya mwisho na kiasi cha kuwa nyuma/mbele ya upstream
git branch feature/loginKuunda tawi bila kubadili
git switch feature/loginKubadili kwenye tawi
git switch -c feature/loginKuunda tawi na kubadili (sawa na git checkout -b)
git switch -Kurudi kwenye tawi lililotangulia
git branch -m new-nameKubadili jina la tawi la sasa
git branch -d feature/loginKufuta tawi lililoshaunganishwa
git branch -D feature/loginKufuta tawi kwa nguvu, hata ambalo halijaunganishwa
git branch --mergedMatawi yaliyoshaunganishwa kwenye la sasa — wagombea wa kufutwa

Kuunganisha na kupanga upya

AmriInafanya nini
git merge featureKuunganisha feature kwenye tawi la sasa (fast-forward ikiwezekana)
git merge --no-ff featureKuunda merge commit kila wakati
git merge --squash featureKukusanya mabadiliko yote ya tawi kwenye index kwa pamoja, kisha git commit
git merge --abortKughairi muunganisho wenye migongano na kurudi kwenye hali ya awali
git rebase mainKuhamisha commit za tawi la sasa juu ya main
git rebase -i HEAD~4Kwa njia shirikishi: kuunganisha (squash), kubadili jina, kupanga upya, kufuta commit 4 za mwisho
git rebase --continueKuendelea baada ya kutatua mgongano
git rebase --abortKughairi rebase kikamilifu
git cherry-pick a1b2c3dKutumia 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

AmriInafanya nini
git remote -vOrodha ya remote na anwani zao
git remote add origin git@github.com:user/repo.gitKuunganisha repo ya mbali kwa jina origin
git remote set-url origin NEW_URLKubadilisha anwani ya remote (kwa mfano kutoka HTTPS kwenda SSH)
git remote remove upstreamKukata remote
git fetchKupakua commit na matawi mapya bila kugusa faili zako
git fetch --pruneSawa na hapo, pamoja na kufuta marejeo ya matawi yaliyofutwa kwenye seva
git pullgit fetch + kuunganisha tawi la upstream kwenye la sasa
git pull --rebasegit fetch + rebase commit zako juu ya zilizopokelewa
git pushKutuma commit za tawi la sasa kwenye upstream yake
git push -u origin feature/loginKutuma tawi kwa mara ya kwanza na kuweka upstream
git push --force-with-leaseKuandika juu ya tawi la mbali, ikiwa hakuna commit mpya za watu wengine
git push origin --delete feature/loginKufuta tawi kwenye seva
git push --tagsKutuma 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?

HaliAmri
Kughairi mabadiliko kwenye faili (kurudi kama ilivyo kwenye commit ya mwisho)git restore app.js
Kuondoa faili kwenye index, mabadiliko yakibakigit restore --staged app.js
Kurudisha faili kutoka commit fulanigit restore --source=a1b2c3d app.js
Kughairi commit ya mwisho, mabadiliko yakibaki kwenye indexgit reset --soft HEAD~1
Kughairi commit ya mwisho, mabadiliko yakibaki kwenye failigit reset HEAD~1 (hali --mixed ya chaguo-msingi)
Kufuta commit ya mwisho pamoja na mabadiliko yake yotegit reset --hard HEAD~1
Kughairi commit iliyochapishwa kwa commit mpya ya kinyumegit revert a1b2c3d
Kughairi merge commitgit revert -m 1 <merge-hash>
Kuona faili zisizofuatiliwa zitakazofutwagit clean -n
Kufuta faili na folda zisizofuatiliwagit clean -fd
Kupata commit «iliyopotea» baada ya reset au rebasegit 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

AmriInafanya nini
git stashKuficha 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 listOrodha ya seti zilizofichwa: stash@{0}, stash@{1}…
git stash show -p stash@{0}Kuona diff ya seti iliyofichwa
git stash popKurudisha 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-formKuunda tawi kutoka commit ambapo stash ilifanyika na kuitumia

Tag na matoleo

AmriInafanya nini
git tagOrodha 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 a1b2c3dTag nyepesi kwenye commit fulani
git push origin v1.2.0Kutuma tag moja
git tag -d v1.2.0Kufuta tag kwenye kompyuta yako
git push origin --delete v1.2.0Kufuta tag kwenye seva
git describe --tagsTag ya karibu na idadi ya commit baada yake, kwa mfano v1.2.0-3-ga1b2c3d

Amri za hali ya juu

AmriInafanya nini
git bisect start, git bisect bad, git bisect good v1.1.0Utafutaji wa mgawanyo kwa commit iliyoleta hitilafu; mwishoni git bisect reset
git worktree add ../hotfix mainFolda ya pili ya kazi yenye tawi tofauti kutoka repo ileile
git submodule update --init --recursiveKupakua submodules baada ya clone
git grep "TODO"Utafutaji wa haraka kwenye faili zinazofuatiliwa
git format-patch -1 HEAD / git apply fix.patchKuhifadhi commit kama patch na kuitumia kwenye folda ya kazi
git gcKukandamiza 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.