11 KiB
11 KiB
Git Cheatsheet - Ghid Complet
Bază - Comenzi Esențiale
Configurare
git config --global user.name "Numele Tău"
git config --global user.email "email@tau.com"
git config --global credential.helper store # Salvează parola
Început proiect
git init # Inițializează repo local
git clone <url> # Copiază repo de pe server
Status și Informații
git status # Vezi starea fișierelor
git log # Istoric commit-uri
git log --oneline # Istoric compact
git log --oneline --graph --all # Istoric vizual cu branch-uri
Lucrul cu Fișiere
Adăugare și Commit
git add file.txt # Adaugă un fișier
git add . # Adaugă toate fișierele
git commit -m "mesaj" # Commit cu mesaj
git commit -am "mesaj" # Add + commit (doar fișiere tracked)
Vedere Diferențe
git diff # Diferențe neincluse în commit
git diff --staged # Diferențe pregătite pentru commit
git diff branch1 branch2 # Diferențe între branch-uri
Branch-uri
Creare și Navigare
git branch # Lista branch-uri locale
git branch -a # Lista toate branch-urile (local + remote)
git branch nume-branch # Creează branch nou
git checkout nume-branch # Mergi pe branch
git checkout -b nume-branch # Creează ȘI mergi pe branch nou
git switch nume-branch # Alternativă modernă la checkout
Ștergere Branch
git branch -d nume-branch # Șterge branch local (safe)
git branch -D nume-branch # Șterge forțat
git push origin --delete branch # Șterge branch remote
Remote (Colaborare)
Adăugare și Vedere
git remote -v # Vezi remote-urile configurate
git remote add origin <url> # Adaugă remote (de obicei origin)
git remote add upstream <url> # Adaugă al 2-lea remote
Push și Pull
git push origin main # Trimite pe server (branch main)
git push origin nume-branch # Trimite branch specific
git push -u origin main # Push + setează tracking
git push --force # Push forțat (PERICULOS!)
git pull origin main # Descarcă + merge automat
git fetch origin # Doar descarcă info (fără merge)
git fetch origin main # Descarcă info despre branch specific
Fetch vs Pull
Git Fetch (Doar informații)
git fetch origin main # Descarcă info, NU modifică codul
git log origin/main # Vezi ce e nou
git diff main origin/main # Compară diferențele
git merge origin/main # Aplici manual când ești gata
Git Pull (Fetch + Merge automat)
git pull origin main # Descarcă ȘI aplică imediat
# Echivalent cu:
# git fetch origin main
# git merge origin/main
Merge vs Rebase
Merge (Combină branch-uri)
git checkout main
git merge feature-branch # Combină feature în main
# Rezultat: istoric cu ramificații
Rebase (Istoricul liniar)
git checkout feature-branch
git rebase main # Mută commit-urile după main
# Rezultat: linie dreaptă
git rebase --continue # Continuă după rezolvare conflict
git rebase --abort # Anulează rebase
REGULĂ: NU face rebase pe branch-uri publice (main, develop)!
Stash (Salvare Temporară)
git stash # Salvează modificările neterminate
git stash save "mesaj" # Stash cu mesaj descriptiv
git stash list # Vezi toate stash-urile
git stash pop # Recuperează ultimul stash (îl șterge)
git stash apply # Recuperează fără să-l șteargă
git stash drop # Șterge stash-ul
git stash clear # Șterge toate stash-urile
Când: Trebuie să schimbi branch-ul, dar nu vrei commit.
Reset vs Revert
Reset (Anulare locală)
git reset --soft HEAD~1 # Anulează commit, păstrează modificările
git reset --mixed HEAD~1 # Anulează commit + staging
git reset --hard HEAD~1 # ȘTERGE tot (PERICULOS!)
git reset --hard origin/main # Resetează la versiunea de pe server
ATENȚIE: NU folosi după push (strici istoricul)!
Revert (Anulare publică)
git revert abc123 # Creează commit NOU care anulează abc123
git revert HEAD # Anulează ultimul commit
Sigur pentru branch-uri publice!
Cherry-pick (Ia commit specific)
git cherry-pick abc123 # Copiază commit-ul abc123 în branch-ul curent
git cherry-pick abc123 def456 # Copiază mai multe commit-uri
Când: Vrei UN bug fix dintr-un branch în altul, fără tot branch-ul.
Tags (Versiuni)
git tag # Lista tag-uri
git tag v1.0.0 # Creează tag
git tag -a v1.0.0 -m "Release 1.0.0" # Tag cu mesaj
git push origin v1.0.0 # Trimite tag pe server
git push origin --tags # Trimite toate tag-urile
git tag -d v1.0.0 # Șterge tag local
git push origin --delete v1.0.0 # Șterge tag remote
Când: Release-uri, versiuni stabile (v1.0.0, v2.1.3).
.gitignore (Fișiere Ignorate)
Creează fișier .gitignore:
# Dependencies
node_modules/
vendor/
# Environment
.env
.env.local
# Logs
*.log
# OS
.DS_Store
Thumbs.db
# IDE
.vscode/
.idea/
Git Blame (Cine a scris codul)
git blame file.txt # Vezi cine a modificat fiecare linie
git blame -L 10,20 file.txt # Doar liniile 10-20
git log -p file.txt # Istoric complet al unui fișier
git log --follow file.txt # Urmărește și redenumiri
Reflog (Recuperare după greșeli)
git reflog # Vezi TOT istoricul (chiar și după reset)
git reset --hard abc123 # Recuperezi la un commit vechi
Când: Ai dat reset din greșeală și vrei să recuperezi.
Submodules (Repo în repo)
git submodule add <url> path/to/folder # Adaugă submodule
git submodule init # Inițializează submodules
git submodule update # Actualizează submodules
git submodule update --init --recursive # Tot într-o comandă
git submodule update --remote # Actualizează la versiunea nouă
Când: Include alte repo-uri (librării) în proiectul tău.
Bisect (Găsește bug-ul)
git bisect start # Începe căutarea
git bisect bad # Commit-ul curent e stricat
git bisect good abc123 # Commit-ul abc123 era OK
# Git te plimbă prin istoric
git bisect reset # Termină bisect
Când: Găsești commit-ul care a introdus bug-ul.
Aliases (Scurtături)
git config --global alias.st status
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.lg "log --oneline --graph --all"
# Apoi folosești:
git st # în loc de git status
git lg # log frumos
Conventional Commits (Mesaje standardizate)
git commit -m "feat: adaugă buton login"
git commit -m "fix: rezolvă memory leak"
git commit -m "docs: actualizează README"
git commit -m "style: formatează cod"
git commit -m "refactor: restructurează funcție"
git commit -m "test: adaugă teste unitare"
git commit -m "chore: actualizează dependencies"
Git Flow (Strategia de branch-uri)
Branch-uri standard:
main/master- Production (cod live)develop- Development (cod în dezvoltare)feature/*- Funcționalități noihotfix/*- Fix-uri urgente pentru productionrelease/*- Pregătire release
Workflow:
# Feature nou
git checkout develop
git checkout -b feature/login
# lucrezi...
git checkout develop
git merge feature/login
# Hotfix urgent
git checkout main
git checkout -b hotfix/critical-bug
# fix...
git checkout main
git merge hotfix/critical-bug
git checkout develop
git merge hotfix/critical-bug
# Release
git checkout develop
git checkout -b release/v1.0.0
# pregătire...
git checkout main
git merge release/v1.0.0
git tag v1.0.0
Rezolvare Conflicte
# Conflict apare la merge/rebase
git status # Vezi fișierele în conflict
# Editezi manual fișierele (caută <<<<<<<, =======, >>>>>>>)
git add file.txt # Marchezi ca rezolvat
git commit # Pentru merge
# SAU
git rebase --continue # Pentru rebase
# Anulare:
git merge --abort # Anulează merge
git rebase --abort # Anulează rebase
Comenzi Utile pentru Debugging
git show abc123 # Arată detalii commit
git show abc123:file.txt # Arată fișier dintr-un commit
git diff HEAD~2 HEAD~1 # Compară 2 commit-uri
git log --author="Nume" # Commit-uri de la o persoană
git log --since="2 weeks ago" # Commit-uri recente
git log --grep="bug" # Caută în mesaje commit
git shortlog -sn # Statistici contribuitori
SSH Setup (Nu mai cere parolă)
# Generează cheie
ssh-keygen -t ed25519 -C "email@tau.com"
# Copiază cheia publică
cat ~/.ssh/id_ed25519.pub
# Adaugă pe GitHub/Gitea: Settings → SSH Keys
# Schimbă URL repo
git remote set-url origin git@github.com:user/repo.git
Situații Comune
Am uitat să fac pull înainte de modificări
git stash # Salvează modificările
git pull origin main # Actualizează
git stash pop # Recuperează modificările
Vreau să modific ultimul commit
git add file.txt
git commit --amend # Modifică ultimul commit
git commit --amend --no-edit # Fără să schimbi mesajul
Am făcut commit pe branch greșit
git log # Notează hash-ul (abc123)
git checkout branch-corect
git cherry-pick abc123 # Copiază commit-ul
git checkout branch-gresit
git reset --hard HEAD~1 # Șterge commit-ul greșit
Vreau să văd ce va face pull
git fetch origin main
git diff main origin/main # Vezi diferențele
git merge origin/main # Când ești gata
Am făcut push din greșeală
git reset --hard HEAD~1 # Anulează local
git push --force origin main # Anulează pe server (PERICULOS!)
ATENȚIE: --force șterge istoricul pentru toată lumea!
Reguli de Aur
- ✅ Commit des cu mesaje clare
- ✅ Pull înainte de push pentru a evita conflicte
- ✅ Branch-uri pentru feature-uri noi
- ❌ NU face rebase pe branch-uri publice (main, develop)
- ❌ NU face push --force dacă alții lucrează pe branch
- ✅ Folosește .gitignore pentru fișiere sensibile
- ✅ Tag-uri pentru release-uri
Link-uri Utile
Salvează acest cheatsheet și îl ai mereu la îndemână! 🚀