Git ir pasaulē populārākā versiju kontroles sistēma (VCS — Version Control System), ko izmanto gandrīz katrā programmatūras izstrādes projektā. To 2005. gadā izveidoja Linuss Torvalds — Linux kodola radītājs — lai efektīvi pārvaldītu Linux izstrādi.

Versiju kontrole ļauj izsekot koda izmaiņām, atgriezties pie iepriekšējām versijām, strādāt vairākiem izstrādātājiem vienlaicīgi un droši eksperimentēt ar jaunu funkcionalitāti.

1. Kāpēc Git ir nepieciešams?

Iedomājieties šādu situāciju bez versiju kontroles:

projekts/
├── index_v1.html
├── index_v2.html
├── index_v2_labots.html
├── index_FINAL.html
├── index_FINAL_v2.html
└── index_TIEŠĀM_FINAL.html

Pazīstami? Git atrisina šo problēmu — tas saglabā pilnu izmaiņu vēsturi, un jums vienmēr ir tikai viens fails ar iespēju atgriezties pie jebkuras iepriekšējās versijas.

Git priekšrocības

  • Pilna vēsture — katra izmaiņa tiek saglabāta ar datumu, autoru un aprakstu
  • Zaru (branch) sistēma — iespēja strādāt pie jaunām funkcijām, neietekmējot galveno kodu
  • Komandas darbs — vairāki izstrādātāji var strādāt pie viena projekta vienlaicīgi
  • Dublēšana — katrs izstrādātājs iegūst pilnu projekta kopiju
  • Atgriešanās — vienmēr var atgriezties pie jebkuras iepriekšējās versijas
  • Bezmaksas — Git ir atvērtā koda programmatūra

2. Instalēšana

Linux (Ubuntu / Debian)

sudo apt update
sudo apt install git -y

Linux (CentOS / Fedora)

sudo dnf install git -y

macOS

# Izmantojot Homebrew
brew install git

# Vai instalējiet Xcode Command Line Tools
xcode-select --install

Windows

Lejupielādējiet instalācijas failu no git-scm.com. Instalācijas laikā atlasiet "Git Bash" — tas nodrošinās Linux-līdzīgu termināli.

Pārbaude

git --version
# Piemēram: git version 2.43.0

3. Sākotnējā konfigurācija

Pirms sākat lietot Git, iestatiet savu vārdu un e-pastu — šī informācija tiks pievienota katram jūsu veiktajam commitam:

git config --global user.name "Jānis Bērziņš"
git config --global user.email "janis@example.com"

Papildu noderīgi iestatījumi

# Noklusējuma zara nosaukums (main, nevis master)
git config --global init.defaultBranch main

# Krāsainais izvads
git config --global color.ui auto

# Noklusējuma teksta redaktors
git config --global core.editor nano

# Skatīt visus iestatījumus
git config --list

4. Pamata koncepti

Pirms sākam lietot Git komandas, svarīgi saprast tā pamatjēdzienus:

Trīs darba zonas

Zona Apraksts Komanda
Working Directory (darba direktorija) Faili, ar kuriem jūs strādājat Rediģēšana failos
Staging Area (sagatavošanas zona) Faili, kas sagatavoti nākamajam commitam git add
Repository (repozitorijs) Saglabātā izmaiņu vēsture git commit

Darba plūsma izskatās šādi:

Rediģēt failus → git add → git commit
(Darba dir.) (Staging) (Repozitorijs)

Kas ir commit?

Commit ir "momentuzņēmums" (snapshot) jūsu projekta stāvoklim konkrētā brīdī. Katrs commit satur:

  • Izmaiņu sarakstu
  • Autora vārdu un e-pastu
  • Datumu un laiku
  • Apraksta ziņojumu (commit message)
  • Unikālu identifikatoru (SHA-1 hash)

5. Pirmā repozitorija izveide

Jauna repozitorija inicializēšana

# Izveidojiet projekta mapi
mkdir mans-projekts
cd mans-projekts

# Inicializējiet Git repozitoriju
git init

Komanda git init izveido slēptu mapi .git/, kurā Git glabā visu versiju vēsturi.

Pirmais commit

# Izveidojiet failu
echo "<h1>Sveika, pasaule!</h1>" > index.html

# Pārbaudiet statusu
git status

# Pievienojiet failu staging zonai
git add index.html

# Veiciet commit
git commit -m "Pievienot sākuma lapu"

git status — jūsu labākais draugs

Komanda git status parāda pašreizējo stāvokli — kuri faili ir mainīti, kuri pievienoti staging zonai, un kuri vēl nav izsekoti:

$ git status
On branch main
Changes not staged for commit:
modified: index.html

Untracked files:
style.css

no changes added to commit

6. Failu pievienošana un committēšana

git add — failu sagatavošana

# Pievienot konkrētu failu
git add index.html

# Pievienot vairākus failus
git add index.html style.css script.js

# Pievienot visus mainītos un jaunos failus
git add .

# Pievienot visus noteikta tipa failus
git add *.html

# Pievienot visu mapes saturu
git add src/

git commit — izmaiņu saglabāšana

# Commit ar ziņojumu
git commit -m "Pievienot CSS stilus"

# Commit ar detalizētu aprakstu (atvērs redaktoru)
git commit

# Pievienot un committēt visus MAINĪTOS failus vienā solī
# (neattiecas uz jauniem failiem)
git commit -am "Labot navigācijas kļūdu"

Laba commit ziņojuma rakstīšana

Kvalitatīvs commit ziņojums ir īss, bet informatīvs:

✅ Labi ❌ Slikti
Pievienot lietotāja reģistrācijas formu Izmaiņas
Labot 404 kļūdu kontaktu lapā fix
Optimizēt attēlu ielādi mobilajā versijā stuff
Noņemt neizmantoto CSS kodu update

Ieteikums: rakstiet commit ziņojumus pavēles izteiksmē — "Pievienot", "Labot", "Noņemt", nevis "Pievienots", "Labots".

7. Izmaiņu vēstures skatīšana

# Pilna commitu vēsture
git log

# Kompakta vēsture (vienā rindā katrs commit)
git log --oneline

# Vēsture ar grafiku (noderīga darbam ar zariem)
git log --oneline --graph --all

# Pēdējie 5 commiti
git log -5

# Konkrēta faila vēsture
git log -- index.html

# Commiti ar izmaiņu detaļām
git log -p

git diff — izmaiņu salīdzināšana

# Nesagatavotās izmaiņas (working dir vs staging)
git diff

# Sagatavotās izmaiņas (staging vs pēdējais commit)
git diff --staged

# Salīdzināt divus commitus
git diff abc123 def456

# Salīdzināt konkrēta faila izmaiņas
git diff index.html

8. Zari (branches)

Zari ir viena no Git jaudīgākajām funkcijām. Tie ļauj strādāt pie dažādām funkcijām vai labojumiem paralēli, neietekmējot galveno kodu.

Kāpēc lietot zarus?

main (galvenais, stabils kods)
├── feature/kontaktu-forma (jauna funkcija)
├── fix/navigacijas-kluda (kļūdas labojums)
└── experiment/jauns-dizains (eksperiments)

Zaru komandas

# Skatīt visus lokālos zarus
git branch

# Izveidot jaunu zaru
git branch jauna-funkcija

# Pārslēgties uz zaru
git checkout jauna-funkcija

# Izveidot un uzreiz pārslēgties (īsāk)
git checkout -b jauna-funkcija

# Vai ar jaunāko komandu:
git switch -c jauna-funkcija

# Pārslēgties atpakaļ uz main
git checkout main

# Dzēst zaru (pēc apvienošanas)
git branch -d jauna-funkcija

# Piespiedu dzēšana (neapvienots zars)
git branch -D jauna-funkcija

Praktiski piemēri

# 1. Izveidot zaru jaunai funkcijai
git checkout -b feature/kontaktu-forma

# 2. Veikt izmaiņas
nano kontakti.html
git add kontakti.html
git commit -m "Pievienot kontaktu formu"

# 3. Vēl izmaiņas
nano style.css
git add style.css
git commit -m "Stilizēt kontaktu formu"

# 4. Atgriezties uz main
git checkout main

# 5. Apvienot zaru
git merge feature/kontaktu-forma

# 6. Dzēst vairs nevajadzīgo zaru
git branch -d feature/kontaktu-forma

9. Zaru apvienošana (merge)

Kad darbs zarā ir pabeigts, to apvieno ar galveno zaru:

# Pārslēgties uz zaru, kurā vēlaties apvienot
git checkout main

# Apvienot zaru
git merge feature/jauna-funkcija

Apvienošanas konflikti

Konflikts rodas, kad divi zari ir mainījuši vienu un to pašu rindu vienā failā. Git nevar automātiski izlemt, kura versija ir pareiza.

$ git merge feature/dizains
Auto-merging index.html
CONFLICT (content): Merge conflict in index.html
Automatic merge failed; fix conflicts and then commit the result.

Atveriet konflikta failu — Git iezīmē problemātiskās vietas:

<h1>Mana mājas lapa</h1>
<<<<<<< HEAD
<p>Laipni lūgti manā lapā!</p>
=======
<p>Sveicināti mūsu jaunajā vietnē!</p>
>>>>>>> feature/dizains

Lai atrisinātu konfliktu:

  1. Atveriet failu un izvēlieties pareizo versiju (vai kombinējiet abas)
  2. Noņemiet Git iezīmes (<<<<<<<, =======, >>>>>>>)
  3. Saglabājiet failu
  4. Pievienojiet un committējiet:

git add index.html
git commit -m "Atrisināt merge konfliktu index.html"

10. Darbs ar attālo repozitoriju (GitHub / GitLab)

Līdz šim mēs strādājām tikai lokāli. Lai dalītos ar kodu vai saglabātu to mākonī, izmantojiet attālo repozitoriju.

Populārākās platformas

Platforma Raksturojums
GitHub Populārākā platforma, milzīga kopiena, bezmaksas privātie repozitoriji
GitLab Iebūvēts CI/CD, var uzstādīt lokālā serverī
Bitbucket Cieša integrācija ar Jira un Atlassian produktiem

Savienošana ar attālo repozitoriju

# Pievienot attālo repozitoriju
git remote add origin https://github.com/lietotajs/mans-projekts.git

# Skatīt pievienotos attālos repozitorijus
git remote -v

# Augšupielādēt kodu uz GitHub
git push -u origin main

Klonēšana — esoša repozitorija lejupielāde

# Klonēt repozitoriju
git clone https://github.com/lietotajs/projekts.git

# Klonēt konkrētā mapē
git clone https://github.com/lietotajs/projekts.git mana-mape

# Klonēt konkrētu zaru
git clone -b develop https://github.com/lietotajs/projekts.git

Sinhronizācija

# Lejupielādēt jaunākās izmaiņas
git pull

# Augšupielādēt savas izmaiņas
git push

# Lejupielādēt informāciju bez apvienošanas
git fetch

Komanda Darbība
git push Augšupielādē lokālos commitus uz attālo serveri
git pull Lejupielādē un apvieno attālas izmaiņas (= fetch + merge)
git fetch Lejupielādē informāciju, bet neapvieno — var apskatīt pirms merge
git clone Pilnīga repozitorija kopēšana (pirmā reize)

11. Izmaiņu atsaukšana

Kļūdas gadās visiem. Git piedāvā vairākus veidus, kā atsaukt izmaiņas:

Nesagatavotu izmaiņu atsaukšana (working directory)

# Atjaunot konkrētu failu uz pēdējo commit versiju
git checkout -- index.html

# Vai ar jaunāko sintaksi:
git restore index.html

# Atjaunot visus mainītos failus
git restore .

Failu noņemšana no staging zonas

# Noņemt no staging, saglabājot izmaiņas failā
git reset HEAD index.html

# Vai ar jaunāko sintaksi:
git restore --staged index.html

Pēdējā commita labošana

# Mainīt pēdējā commita ziņojumu
git commit --amend -m "Labots ziņojums"

# Pievienot aizmirstus failus pēdējam commitam
git add aizmirsts-fails.html
git commit --amend --no-edit

Commita atsaukšana (droši)

# Izveidot jaunu commitu, kas atsauc konkrēta commita izmaiņas
git revert abc1234

Svarīgi: git revert ir drošs — tas izveido jaunu commitu, kas atceļ izmaiņas, nezaudējot vēsturi. Tas ir ieteicamais veids, kā atsaukt publiskotus commitus.

12. .gitignore — failu izslēgšana

Ne visi faili jāiekļauj versiju kontrolē. Faili ar parolēm, būvējuma rezultāti un pagaidu faili jāizslēdz.

Izveidojiet failu .gitignore projekta saknē:

# Atkarību mapes
node_modules/
vendor/

# Vides mainīgie un noslēpumi
.env
.env.local
*.key
*.pem

# Būvējuma rezultāti
dist/
build/
*.min.js
*.min.css

# OS un redaktora faili
.DS_Store
Thumbs.db
.vscode/
.idea/
*.swp
*.swo

# Logu faili
*.log
npm-debug.log*

# Pagaidu faili
tmp/
*.tmp

.gitignore noteikumi

Šablons Nozīme Piemērs
*.log Visi faili ar paplašinājumu .log error.log, access.log
build/ Visa mape "build" build/app.js
!important.log Izņēmums — neizslēgt šo failu important.log
doc/*.txt .txt faili tikai doc/ mapē doc/notes.txt
**/temp "temp" mape jebkurā līmenī src/temp, a/b/temp

Padoms: vietnē gitignore.io var automātiski ģenerēt .gitignore failu atbilstoši jūsu tehnoloģijām.

13. Noderīgas Git komandas

Komanda Apraksts
git status Pašreizējais stāvoklis
git log --oneline Kompakta commitu vēsture
git diff Nesagatavotās izmaiņas
git stash Pagaidām nolikt malā nepabeigtas izmaiņas
git stash pop Atjaunot malā noliktas izmaiņas
git blame index.html Kas mainīja katru rindu failā
git show abc123 Skatīt konkrēta commita detaļas
git tag v1.0 Atzīmēt commitu ar versijas tagu
git clean -fd Dzēst neizsekotus failus un mapes
git remote -v Attālie repozitoriji

14. Tipiska darba plūsma

Šeit ir tipiska ikdienas darba plūsma ar Git:

# 1. Sinhronizēt ar attālo serveri
git pull

# 2. Izveidot zaru jaunai funkcijai
git checkout -b feature/jauns-dizains

# 3. Veikt izmaiņas
# ... rediģēt failus ...

# 4. Apskatīt, kas mainījies
git status
git diff

# 5. Sagatavot un committēt
git add .
git commit -m "Ieviest jaunu galvenes dizainu"

# 6. Augšupielādēt zaru
git push -u origin feature/jauns-dizains

# 7. Izveidot Pull Request (GitHub/GitLab vietnē)
# ... koda pārskats ...

# 8. Pēc apstiprināšanas — apvienot ar main
git checkout main
git pull
git merge feature/jauns-dizains
git push

# 9. Dzēst vairs nevajadzīgo zaru
git branch -d feature/jauns-dizains
git push origin --delete feature/jauns-dizains

15. Biežākās kļūdas un to risinājumi

Problēma Risinājums
Commitēju uz nepareiza zara git reset HEAD~1 → pārslēgties uz pareizo zaru → committēt
Aizmirsu pievienot failu commitam git add fails.html && git commit --amend --no-edit
Kļūda commit ziņojumā git commit --amend -m "Pareizais ziņojums"
Nejauši izdzēsu failu git restore izdzestais.html
Vēlos atsaukt pēdējo commitu git revert HEAD (droši) vai git reset HEAD~1 (lokāli)
push noraidīts (non-fast-forward) git pull --rebase → tad git push
Liels fails nejauši commitēts Pievienojiet .gitignore un izmantojiet git rm --cached fails

Kopsavilkums

Git ir būtisks rīks katram izstrādātājam. Sākumā var šķist sarežģīti, bet ikdienas darbā parasti pietiek ar 10–15 pamata komandām:

  1. Sāciet ar pamatuinit, add, commit, status, log
  2. Iemācieties zarusbranch, checkout, merge
  3. Strādājiet ar attālo repozitorijuclone, push, pull
  4. Izveidojiet .gitignore — izslēdziet nevajadzīgos failus
  5. Rakstiet labus commit ziņojumus — jūsu nākotnes "es" pateiks paldies
  6. Nebaidieties no kļūdām — Git gandrīz vienmēr ļauj atsaukt izmaiņas

Noderīgas saites:

Laboja mad, labots 1x