git init
Crea un repository Git nella cartella corrente. Genera la cartella nascosta .git/ che contiene tutta la storia del progetto.
$ mkdir my-project && cd my-project
$ git init
Initialized empty Git repository in /home/steven/my-project/.git/
git clone url
Scarica un repository completo (codice + tutta la storia) da un server remoto. Il modo standard per iniziare a lavorare su un progetto esistente.
$ git clone git@github.com:giobi/claude-skills.git
Cloning into 'claude-skills'...
remote: Enumerating objects: 234, done.
remote: Total 234 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (234/234), 45.2 KiB | 1.2 MiB/s, done.
$ cd claude-skills && ls
README.md plugins/ boot/
git status
Mostra lo stato del working tree: file modificati, file in staging, file nuovi non tracciati. Il comando che usi piu spesso in assoluto.
$ git status
On branch main
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: src/app.py
Changes not staged for commit:
modified: config.yaml
Untracked files:
notes.txt
git add file.txt
Aggiunge file alla staging area (il "palco" dei prossimi commit). Usa git add . per tutto, ma attenzione a non includere file sensibili.
# Singolo file
$ git add src/app.py
# Tutti i file modificati e nuovi
$ git add .
# Solo file gia tracciati (no nuovi)
$ git add -u
# Pattern
$ git add *.py
git add . include TUTTO, anche .env con le password. Usa sempre un .gitignore e controlla con git status prima di committare.
git commit -m "messaggio"
Salva uno snapshot del codice nella storia. Il messaggio deve spiegare il perche, non il cosa — il diff mostra gia il cosa.
# Commit con messaggio inline
$ git commit -m "Fix login timeout su connessioni lente"
# Commit con editor (per messaggi lunghi)
$ git commit
# Add + commit insieme (solo file gia tracciati)
$ git commit -am "Aggiorna config porta database"
git push
Invia i tuoi commit al repository remoto. La prima volta su un branch nuovo serve -u per impostare il tracking.
# Push normale (branch gia tracciato)
$ git push
# Prima push di un branch nuovo
$ git push -u origin feature/login
# Push su un remoto specifico
$ git push origin main
git pull
Scarica le modifiche dal remoto e le integra nel branch locale. E un git fetch + git merge in un colpo solo.
$ git pull
remote: Enumerating objects: 5, done.
Already up to date.
# Pull con rebase (storia piu pulita, senza merge commit)
$ git pull --rebase
git pull --rebase evita i merge commit inutili quando lavori da solo. Metti pull.rebase = true nella config globale per farlo di default.