# Git — fișă de comenzi

## Configurare inițială
```
git config --global user.name "Numele Tău"
git config --global user.email "adresa@exemplu.ro"
git config --global init.defaultBranch main
git config --global core.autocrlf true      # Windows
git config --global alias.lg "log --oneline --graph --decorate -20"
```

## Ciclul zilnic
```
git status                  # unde mă aflu
git diff                    # ce am modificat (nestaged)
git diff --staged           # ce urmează să commit
git add <fisier>            # pun în staging
git commit -m "Mesaj"       # salvez în istoric
git push                    # trimit pe server
git pull                    # aduc și integrez
```

## Branch-uri
```
git branch                          # lista locală
git switch -c feature/nume          # creez și trec pe el
git switch main                     # mă mut
git merge feature/nume              # integrez
git branch -d feature/nume          # șterg local (sigur)
git push origin --delete feature/x  # șterg pe server
git fetch --prune                   # curăț referințele moarte
```

## Stash
```
git stash push -u -m "descriere"
git stash list
git stash pop
git stash drop
```

## Rebase
```
git rebase origin/main
git rebase --continue / --abort
git rebase -i HEAD~4        # squash, reword, drop
git push --force-with-lease
```

## Recuperare (tabel de urgență)
```
git restore .                     # renunț la modificări nesalvate
git restore --staged <fisier>     # scot din staging
git commit --amend                # corectez ultimul commit
git reset --soft HEAD~1           # anulez commit, păstrez modificările
git reset --hard HEAD~1           # anulez commit și modificări (periculos)
git revert <hash>                 # anulez un commit deja publicat
git reflog                        # istoricul mișcărilor HEAD — recuperez orice
git bisect start / good / bad     # găsesc commit-ul care a stricat
git blame -L 40,60 <fisier>       # cine și când a scris liniile
```

## Reguli de siguranță
1. Nu faci rebase la commit-uri pe care le-au luat deja alții.
2. Folosești `--force-with-lease`, niciodată `--force`.
3. Înainte de orice `--hard`, rulezi `git status` și, la nevoie, `git stash -u`.
4. Secretele (.env, chei API) nu ajung niciodată în Git. Dacă au ajuns, le schimbi.
