Vad är Git?
Git är ett distribuerat versionshanteringssystem för att registrera kodändringar över tid. Med Git kan utvecklare spara historiken över sitt arbete, jobba med flera funktioner separat och samarbeta utan att ständigt skriva över varandras filer.
Git används vanligtvis för att:
- Spåra kodändringar
- Arbeta tillsammans med ett team
- Gå tillbaka till en tidigare version vid problem
- Testa nya funktioner i en separat gren
Git skapades av Linus Torvalds år 2005. Git är fortfarande det främsta verktyget för versionshantering i många mjukvaruprojekt.
Varför är Git viktigt?
Innan Git
Föreställ dig att du arbetar utan Git:
project/
├── app.js
├── app_backup.js
├── app_backup_final.js
├── app_backup_final_FINAL.js
├── app_backup_final_FINAL_v2.js
└── app_backup_THIS_ONE_USE_THIS.js
Problem:
- Dubblettfiler överallt
- Du vet inte vilka ändringar som gjorts
- Svårt att samarbeta med teamet
- Rädsla för att radera kod eftersom du inte kan gå tillbaka
Med Git
$ git log --oneline
a1b2c3d (HEAD -> main) Add user authentication
d4e5f6g Refactor database queries
g7h8i9j Initial commit
Fördelar:
- Fullständig historik över alla ändringar
- Vem som ändrat vad och när
- Möjlighet att gå tillbaka till vilken version som helst
- Teamsamarbete utan konflikter
Grundläggande Git-koncept
Repository (Repo)
Projektmappen som spåras av Git. Ett repository innehåller:
- Källkod
- Historik över alla ändringar
- Grenar (branches) och taggar
- Konfiguration
# Initiera ett nytt repository
git init
# Klona ett befintligt repository
git clone https://github.com/username/project.git
Commit
En ögonblicksbild av dina kodändringar. Som en "sparpunkt" i ett spel.
# Visa filstatus
git status
# Lägg till filer i staging
git add index.html
git add . # Lägg till alla filer
# Checka in ändringarna
git commit -m "Add homepage design"
Branch
En separat utvecklingsgren. Som ett "parallellt universum" för din kod.
# Lista grenar
git branch
# Skapa en ny gren
git branch feature-login
# Byt till grenen
git checkout feature-login
# eller med Git 2.23+
git switch feature-login
# Skapa och byt samtidigt
git checkout -b feature-login
Merge
Slår ihop ändringar från en gren till en annan.
# Byt till målgrenen
git checkout main
# Slå ihop den andra grenen
git merge feature-login
Grundläggande Git-arbetsflöde
1. Grundinställning
# Konfigurera identitet
git config --global user.name "Ditt namn"
git config --global user.email "email@example.com"
# Visa konfigurationen
git config --list
2. Dagligt arbetsflöde
# 1. Kontrollera status
git status
# 2. Hämta de senaste ändringarna
git pull origin main
# 3. Skapa en funktionsgren
git checkout -b feature-new-button
# 4. Gör ändringar och lägg till dem
git add .
# 5. Checka in ändringarna
git commit -m "Add new button to homepage"
# 6. Pusha till fjärrarkivet (remote)
git push origin feature-new-button
3. Slå ihop med huvudgrenen
# Byt till main
git checkout main
# Hämta senaste ändringar
git pull origin main
# Slå ihop funktionsgrenen
git merge feature-new-button
# Pusha till fjärrarkivet
git push origin main
Viktiga Git-kommandon
Status och information
# Filstatus
git status
# Visa commit-historik
git log
git log --oneline
git log --graph --oneline --all
# Visa ändringar
git diff
git diff --staged
# Visa en specifik commit
git show a1b2c3d
Arbeta med ändringar
# Lägg till filer
git add file.txt
git add *.js
git add .
# Ta bort från staging
git reset file.txt
# Kasta ändringar
git checkout -- file.txt
git restore file.txt # Git 2.23+
# Undanlägg ändringar (tillfällig sparning)
git stash
git stash list
git stash pop
Grenar
# Lista grenar
git branch
git branch -a # Inkludera fjärrgrenar
# Skapa gren
git branch feature-name
# Byt gren
git switch feature-name
# Ta bort gren
git branch -d feature-name
git branch -D feature-name # Tvinga borttagning
Fjärroperationer
# Lista fjärrarkiv
git remote -v
# Lägg till fjärrarkiv
git remote add origin https://github.com/user/repo.git
# Hämta ändringar (utan att slå ihop)
git fetch origin
# Hämta och slå ihop ändringar (fetch + merge)
git pull origin main
# Pusha ändringar
git push origin main
git push -u origin main # Ställ in upstream
Ångra ändringar
# Ångra senaste commit (behåll ändringarna)
git reset --soft HEAD~1
# Ångra senaste commit (kasta ändringarna)
git reset --hard HEAD~1
# Återställ en commit (skapar en ny commit)
git revert a1b2c3d
# Ändra senaste commit
git commit --amend -m "New message"
Grenstrategier
Git Flow
En populär strategi för produktionsappar:
main (production)
├── develop (integration)
├── feature/login
├── feature/payment
└── feature/dashboard
release/1.0.0
hotfix/critical-bug
GitHub Flow
En enklare strategi för kontinuerlig driftsättning (continuous deployment):
main (always deployable)
├── feature/user-auth
├── feature/api-endpoint
└── bugfix/login-error
.gitignore-filen
En fil för att exkludera filer/mappar från Git:
# Node.js
node_modules/
npm-debug.log
.env
# Python
__pycache__/
*.pyc
venv/
# IDE
.vscode/
.idea/
*.swp
# OS
.DS_Store
Thumbs.db
# Byggfiler
dist/
build/
*.log
Git med GitHub/GitLab
SSH-konfiguration
# Generera SSH-nyckel
ssh-keygen -t ed25519 -C "email@example.com"
# Kopiera publik nyckel
cat ~/.ssh/id_ed25519.pub
# Lägg till i GitHub-/GitLab-inställningarna
# Testa anslutningen
ssh -T git@github.com
Pull Requests / Merge Requests
Samarbetsflöde:
- Forka/klona repositoryt
- Skapa en gren för funktionen
- Checka in ändringar med beskrivande meddelanden
- Pusha till fjärrarkivet
- Skapa en PR/MR på GitHub/GitLab
- Kodgranskning från teamet
- Slå ihop (merge) efter godkännande
Bästa praxis för Git
1. Commit-meddelanden
Mindre bra:
git commit -m "fix"
git commit -m "update"
git commit -m "asdfasdf"
Bättre:
git commit -m "Fix login validation bug"
git commit -m "Add user profile endpoint"
git commit -m "Refactor database connection logic"
Bra format:
<type>: <subject>
<body>
<footer>
Exempel:
feat: Add user authentication
- Implement JWT token generation
- Add login/register endpoints
- Create middleware for auth check
Closes #123
Typer:
feat: Ny funktionfix: Buggfixdocs: Dokumentationstyle: Formatering, ingen kodändringrefactor: Kodomstruktureringtest: Lägg till testerchore: Underhållsuppgifter
2. Checka in ofta, förbättra senare
# Checka in ofta under utveckling
git commit -m "WIP: Add user model"
git commit -m "WIP: Add validation"
git commit -m "WIP: Add tests"
# Slå ihop (squash) commits innan merge
git rebase -i HEAD~3
3. Checka aldrig in känslig data
Checka inte in:
- API-nycklar
- Lösenord
- Databasuppgifter
- Privata nycklar
.env-filer
Använd miljövariabler:
// config.js
module.exports = {
apiKey: process.env.API_KEY,
dbPassword: process.env.DB_PASSWORD
}
4. Hämta innan du pushar
# Hämta alltid först
git pull origin main
# Lös eventuella konflikter
# Pusha sedan
git push origin main
Hantera sammanslagningskonflikter
När Git inte kan slå ihop automatiskt:
$ git merge feature-branch
Auto-merging index.html
CONFLICT (content): Merge conflict in index.html
Automatic merge failed; fix conflicts and then commit the result.
Fil med konflikt:
<!DOCTYPE html>
<html>
<<<<<<< HEAD
<title>Main Branch Title</title>
=======
<title>Feature Branch Title</title>
>>>>>>> feature-branch
</html>
Lösning:
- Redigera filen, ta bort konfliktmarkörerna
- Behåll en version eller kombinera båda
git addfilengit commitför att slutföra sammanslagningen
# Efter att ha löst konflikten
git add index.html
git commit -m "Resolve merge conflict in index.html"
Git-alias (genvägar)
# Konfigurera alias
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.st status
git config --global alias.unstage 'reset HEAD --'
git config --global alias.last 'log -1 HEAD'
git config --global alias.visual 'log --graph --oneline --all'
# Användning
git co main
git br feature-new
git ci -m "message"
git st
Vanliga misstag och lösningar
1. Checkat in på fel gren
# Skapa en gren från nuvarande tillstånd
git branch correct-branch
# Återställ den nuvarande grenen
git reset --hard HEAD~1
# Byt till rätt gren
git checkout correct-branch
2. Behöver ändra senaste commit-meddelandet
git commit --amend -m "Correct message"
3. Råkat radera en fil
# Återställ från senaste commit
git checkout HEAD -- file.txt
4. Vill ångra alla lokala ändringar
# Kasta alla lokala ändringar
git reset --hard HEAD
# Rensa ospårade filer
git clean -fd
Git för team
Checklista för kodgranskning
- Koden följer stilguiden
- Tester finns med
- Ingen känslig data har checkats in
- Commit-meddelandena är tydliga
- Dokumentationen är uppdaterad
- Inga sammanslagningskonflikter
Skyddade grenar
På GitHub/GitLab kan du sätta regler för huvudgrenen:
- Kräv granskning av pull requests
- Kräv att statuskontroller godkänns
- Kräv att grenar är uppdaterade
- Ingen force push tillåten
Gittips för dig som utvecklare
1. Börja med ett eget projekt
# Skapa ett enkelt projekt
mkdir my-first-repo
cd my-first-repo
git init
echo "# My First Repo" > README.md
git add README.md
git commit -m "Initial commit"
Små projekt är faktiskt perfekta för att lära sig Git, eftersom du kan experimentera fritt utan att riskera att förstöra teamets arbete.
2. Öva via GitHub
- Skapa ett gratis GitHub-konto
- Klona eller forka ett open source-projekt
- Testa att bidra med något litet, till exempel en dokumentationsfix
- Använd publika repositories för att bygga upp din portfolio
3. Lär dig av verkliga scenarier
Prova scenarier som ofta uppstår i praktiken:
- Skapa en ny gren
- Lösa en sammanslagningskonflikt
- Testa merge och rebase
- Återställa felaktiga ändringar
4. Använd ett GUI om det underlättar
Om kommandoraden känns tung i början kan GUI-verktyg hjälpa dig att förstå Gits arbetsflöde:
- GitHub Desktop - Enkelt och nybörjarvänligt
- SourceTree - Fler funktioner
- GitKraken - Tydlig visualisering
- VS Code - Har inbyggd Git-integration
Git med smbCloud
smbCloud integreras med Git för automatisk driftsättning:
# Konfigurera fjärrarkiv
git remote add smb https://git.smbcloud.xyz/yourapp.git
# Driftsätt med git push
git push smb main
# smbCloud gör automatiskt följande:
# Hämtar senaste koden
# Installerar beroenden
# Kör tester
# Bygger applikationen
# Driftsätter till produktion
Resurser för att lära dig mer
Interaktiva handledningar
- Learn Git Branching - learngitbranching.js.org
- GitHub Skills - skills.github.com
Fusklappar
- GitHub Git Cheat Sheet - education.github.com/git-cheat-sheet-education.pdf
- Atlassian Git Cheat Sheet - atlassian.com/git/tutorials/atlassian-git-cheatsheet
Böcker
- Pro Git (Gratis) - git-scm.com/book
- Git Pocket Guide - O'Reilly
Sammanfattning
Git är grunden i mångas dagliga utvecklingsarbete. Med Git kan du spåra ändringar, arbeta säkrare och samarbeta utan att behöva förlita dig på förvirrande manuella filkopior.
Nästa steg:
- Installera Git på din dator
- Skapa ett GitHub-konto
- Initiera Git i ett eget projekt
- Öva på commit, gren och merge
- Testa att bidra med något litet till open source
När grunderna känns bekväma blir mer avancerade funktioner som rebase, cherry-pick och CI/CD-arbetsflöden mycket lättare att förstå.