Salta al contenuto principale

Breviario git: compendio dei comandi essenziali

·1046 parole·5 minuti
❯ lineadicomando.it
Autore
❯ lineadicomando.it
Specs, Bugs and Log Console

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 git

RHEL / Fedora

sudo dnf install git

Arch Linux

sudo pacman -S git

Procedura
#

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 vim

Nome branch predefinito per i nuovi repository

git config --global init.defaultBranch main

Salvataggio credenziali su disco

git config --global credential.helper store

Implicazioni di sicurezza: le credenziali vengono salvate in chiaro in ~/.git-credentials. Chiunque abbia accesso al file (o alla home) può leggerle. Preferire cache (tiene le credenziali in memoria per un tempo limitato) oppure il keyring del sistema operativo (libsecret su Linux, osxkeychain su macOS) che cifra le credenziali a riposo. Usare store solo su macchine personali e mai su sistemi condivisi o server.

Visualizzare tutta la configurazione

git config --list

2. Creare o clonare un repository
#

Inizializzare un nuovo repo nella directory corrente

git init

Clonare un repository remoto

git clone <url>

Clonare in una directory specifica

git clone <url> <directory>

3. Stato e differenze
#

Stato del working tree

git status

Differenze non ancora in staging

git diff

Differenze in staging (pronte per il commit)

git diff --staged

4. 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 -p

Rimuovere 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 --amend

5. Branch
#

Listare i branch locali

git branch

Listare tutti i branch (locali e remoti)

git branch -a

Creare 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 --continue

Interrompere il rebase e tornare allo stato precedente

git rebase --abort

7. Remote e sincronizzazione
#

Visualizzare i remote configurati

git remote -v

Aggiungere un remote

git remote add origin <url>

Scaricare aggiornamenti senza applicarli

git fetch

Scaricare e applicare aggiornamenti al branch corrente

git pull

Pull con rebase invece di merge

git pull --rebase

Pubblicare 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 --all

Log degli ultimi N commit

git log -n 10

Log con diff di ogni commit

git log -p

Chi 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 stash

Stash con un nome descrittivo

git stash push -m "descrizione"

Listare gli stash

git stash list

Ripristinare l’ultimo stash

git stash pop

Ripristinare 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 tag

Pubblicare un tag sul remote

git push origin v1.0

Pubblicare tutti i tag

git push origin --tags

11. 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~1

Tornare a un commit precedente mantenendo le modifiche nel working tree

git reset --mixed HEAD~1

Annullare 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 main

Visualizzare la storia in modo leggibile

git log --oneline --graph --decorate --all

Recuperare 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 salvataggio

Conflitti di merge Risolverli manualmente, poi:

git add <file-risolto>
git commit

Push rifiutato (non fast-forward) Il remoto ha commit che non si hanno in locale:

git pull --rebase
git push

Commit 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~1

Note operative
#

  • git add -p è uno dei comandi più utili: permette di costruire commit atomici anche con molte modifiche sparse
  • Mai usare git push --force su branch condivisi: riscrivere la storia pubblica rompe il repo altrui
  • git revert è sempre preferibile a git reset quando il commit è già stato pubblicato
  • .gitignore va committato nel repo: è parte della configurazione del progetto

Riferimenti
#