Compendio operativo di git: i comandi che servono davvero nel lavoro quotidiano, organizzati per contesto d’uso.
Indice #
Contesto #
Git è il sistema di controllo versione distribuito standard. Ogni operazione avviene localmente, la sincronizzazione con il remoto è esplicita.
Prerequisiti #
- Git installato
- Conoscenza base di terminale
Installazione rapida #
Debian / Ubuntu
sudo apt install gitRHEL / Fedora
sudo dnf install gitArch Linux
sudo pacman -S gitProcedura #
1. Configurazione iniziale #
Identità dell’autore (obbligatoria per i commit)
git config --global user.name "Nome Cognome"
git config --global user.email "email@esempio.com"Editor preferito
git config --global core.editor vimNome branch predefinito per i nuovi repository
git config --global init.defaultBranch mainSalvataggio credenziali su disco
git config --global credential.helper storeImplicazioni di sicurezza: le credenziali vengono salvate in chiaro in
~/.git-credentials. Chiunque abbia accesso al file (o alla home) può leggerle. Preferirecache(tiene le credenziali in memoria per un tempo limitato) oppure il keyring del sistema operativo (libsecretsu Linux,osxkeychainsu macOS) che cifra le credenziali a riposo. Usarestoresolo su macchine personali e mai su sistemi condivisi o server.
Visualizzare tutta la configurazione
git config --list2. Creare o clonare un repository #
Inizializzare un nuovo repo nella directory corrente
git initClonare un repository remoto
git clone <url>Clonare in una directory specifica
git clone <url> <directory>3. Stato e differenze #
Stato del working tree
git statusDifferenze non ancora in staging
git diffDifferenze in staging (pronte per il commit)
git diff --staged4. Staging e commit #
Aggiungere un file allo staging
git add <file>Aggiungere tutto il working tree allo staging
git add .Aggiungere interattivamente (scelta per hunk)
git add -pRimuovere un file dallo staging senza perdere le modifiche
git restore --staged <file>Creare un commit
git commit -m "messaggio"Aggiungere tutto e committare in un solo comando
git commit -am "messaggio"Correggere il commit più recente (messaggio o contenuto)
git commit --amend5. Branch #
Listare i branch locali
git branchListare tutti i branch (locali e remoti)
git branch -aCreare un nuovo branch
git branch <nome>Spostarsi su un branch
git checkout <nome>Creare un branch e spostarsi subito
git checkout -b <nome>Sintassi moderna equivalente
git switch -c <nome>Rinominare il branch corrente
git branch -m <nuovo-nome>Eliminare un branch (solo se già mergiato)
git branch -d <nome>Eliminare un branch forzatamente
git branch -D <nome>6. Merge e rebase #
Fare merge di un branch nel corrente
git merge <branch>Merge senza fast-forward (mantiene la storia del branch)
git merge --no-ff <branch>Rebase del branch corrente su un altro
git rebase <branch>Continuare il rebase dopo aver risolto un conflitto
git rebase --continueInterrompere il rebase e tornare allo stato precedente
git rebase --abort7. Remote e sincronizzazione #
Visualizzare i remote configurati
git remote -vAggiungere un remote
git remote add origin <url>Scaricare aggiornamenti senza applicarli
git fetchScaricare e applicare aggiornamenti al branch corrente
git pullPull con rebase invece di merge
git pull --rebasePubblicare il branch corrente sul remote
git push origin <branch>Impostare il tracking remoto al primo push
git push -u origin <branch>Eliminare un branch remoto
git push origin --delete <branch>8. Log e storia #
Log compatto con grafo
git log --oneline --graph --allLog degli ultimi N commit
git log -n 10Log con diff di ogni commit
git log -pChi ha modificato ogni riga di un file
git blame <file>Cercare un testo in tutti i commit
git log -S "testo da cercare"Visualizzare un commit specifico
git show <hash>9. Stash #
Mettere da parte le modifiche in corso
git stashStash con un nome descrittivo
git stash push -m "descrizione"Listare gli stash
git stash listRipristinare l’ultimo stash
git stash popRipristinare uno stash specifico
git stash apply stash@{2}Eliminare uno stash
git stash drop stash@{0}10. Tag #
Creare un tag annotato
git tag -a v1.0 -m "versione 1.0"Listare i tag
git tagPubblicare un tag sul remote
git push origin v1.0Pubblicare tutti i tag
git push origin --tags11. Reset e recupero errori #
Annullare le modifiche a un file (non ancora in staging)
git restore <file>Tornare a un commit precedente mantenendo le modifiche in staging
git reset --soft HEAD~1Tornare a un commit precedente mantenendo le modifiche nel working tree
git reset --mixed HEAD~1Annullare un commit già pubblicato (crea un commit inverso)
git revert <hash>Trovare il commit che ha introdotto un bug (ricerca binaria)
git bisect start
git bisect bad
git bisect good <hash-funzionante>Esempi pratici #
Scenario tipico: aggiornare un branch feature con le ultime modifiche da main
git checkout main
git pull
git checkout feature/mia-feature
git rebase mainVisualizzare la storia in modo leggibile
git log --oneline --graph --decorate --allRecuperare un file cancellato per errore
git checkout HEAD -- <file>Applicare un singolo commit da un altro branch
git cherry-pick <hash>Errori comuni #
“detached HEAD”
Si è in uno stato senza branch attivo (ad es. dopo git checkout <hash>).
Creare un branch per salvare il lavoro:
git checkout -b salvataggioConflitti di merge Risolverli manualmente, poi:
git add <file-risolto>
git commitPush rifiutato (non fast-forward) Il remoto ha commit che non si hanno in locale:
git pull --rebase
git pushCommit nel branch sbagliato Spostare il commit sull’altro branch con cherry-pick, poi resettare:
git log --oneline # annotare l'hash
git checkout branch-giusto
git cherry-pick <hash>
git checkout branch-sbagliato
git reset --hard HEAD~1Note operative #
git add -pè uno dei comandi più utili: permette di costruire commit atomici anche con molte modifiche sparse- Mai usare
git push --forcesu branch condivisi: riscrivere la storia pubblica rompe il repo altrui git revertè sempre preferibile agit resetquando il commit è già stato pubblicato.gitignoreva committato nel repo: è parte della configurazione del progetto