Update git_sheet.md
This commit is contained in:
456
git_sheet.md
Normal file
456
git_sheet.md
Normal file
@@ -0,0 +1,456 @@
|
||||
# Git Cheatsheet - Ghid Complet
|
||||
|
||||
## Bază - Comenzi Esențiale
|
||||
|
||||
### Configurare
|
||||
```bash
|
||||
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
|
||||
```bash
|
||||
git init # Inițializează repo local
|
||||
git clone <url> # Copiază repo de pe server
|
||||
```
|
||||
|
||||
### Status și Informații
|
||||
```bash
|
||||
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
|
||||
```bash
|
||||
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
|
||||
```bash
|
||||
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
|
||||
```bash
|
||||
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
|
||||
```bash
|
||||
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
|
||||
```bash
|
||||
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
|
||||
```bash
|
||||
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)
|
||||
```bash
|
||||
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)
|
||||
```bash
|
||||
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)
|
||||
```bash
|
||||
git checkout main
|
||||
git merge feature-branch # Combină feature în main
|
||||
# Rezultat: istoric cu ramificații
|
||||
```
|
||||
|
||||
### Rebase (Istoricul liniar)
|
||||
```bash
|
||||
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ă)
|
||||
|
||||
```bash
|
||||
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ă)
|
||||
```bash
|
||||
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ă)
|
||||
```bash
|
||||
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)
|
||||
|
||||
```bash
|
||||
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)
|
||||
|
||||
```bash
|
||||
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)
|
||||
|
||||
```bash
|
||||
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)
|
||||
|
||||
```bash
|
||||
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)
|
||||
|
||||
```bash
|
||||
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)
|
||||
|
||||
```bash
|
||||
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)
|
||||
|
||||
```bash
|
||||
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)
|
||||
|
||||
```bash
|
||||
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 noi
|
||||
- `hotfix/*` - Fix-uri urgente pentru production
|
||||
- `release/*` - Pregătire release
|
||||
|
||||
### Workflow:
|
||||
```bash
|
||||
# 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
|
||||
|
||||
```bash
|
||||
# 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
|
||||
|
||||
```bash
|
||||
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ă)
|
||||
|
||||
```bash
|
||||
# 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
|
||||
```bash
|
||||
git stash # Salvează modificările
|
||||
git pull origin main # Actualizează
|
||||
git stash pop # Recuperează modificările
|
||||
```
|
||||
|
||||
### Vreau să modific ultimul commit
|
||||
```bash
|
||||
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
|
||||
```bash
|
||||
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
|
||||
```bash
|
||||
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ă
|
||||
```bash
|
||||
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
|
||||
|
||||
1. ✅ **Commit des** cu mesaje clare
|
||||
2. ✅ **Pull înainte de push** pentru a evita conflicte
|
||||
3. ✅ **Branch-uri pentru feature-uri** noi
|
||||
4. ❌ **NU face rebase** pe branch-uri publice (main, develop)
|
||||
5. ❌ **NU face push --force** dacă alții lucrează pe branch
|
||||
6. ✅ **Folosește .gitignore** pentru fișiere sensibile
|
||||
7. ✅ **Tag-uri pentru release-uri**
|
||||
|
||||
---
|
||||
|
||||
## Link-uri Utile
|
||||
|
||||
- [Git Documentation](https://git-scm.com/doc)
|
||||
- [Git Cheatsheet Official](https://training.github.com/)
|
||||
- [Conventional Commits](https://www.conventionalcommits.org/)
|
||||
- [Git Flow](https://nvie.com/posts/a-successful-git-branching-model/)
|
||||
|
||||
---
|
||||
|
||||
**Salvează acest cheatsheet și îl ai mereu la îndemână!** 🚀
|
||||
Reference in New Issue
Block a user