12/01/2026

Git non è solo un sistema di versionamento.
È un modello mentale per gestire la storia del software.
Chi impara Git dal terminale capisce Git.
Chi impara Git da una GUI spesso non capisce cos’è Git.
Questa guida ti porta dalle basi fino ai meccanismi interni, così da dominarlo davvero.
Git nasce nel 2005 da Linus Torvalds, durante lo sviluppo del kernel Linux, con tre obiettivi:
Git non è stato progettato per essere semplice: è stato progettato per non rompersi.
Ma una volta compreso il modello mentale, diventa uno strumento potentissimo che ti fa lavorare più velocemente e con meno paura di sbagliare.
Git non salva file.
Git salva snapshot (stati del progetto) collegati tra loro tramite hash.
Ogni commit è come un “checkpoint” che contiene:
La bellezza?
Ogni commit è immutabile. Se lo cambi, Git crea un nuovo commit con una nuova hash.
Git ha tre livelli:
La cartella dove modifichi i file.
La “lista della spesa” di cosa entrerà nel prossimo commit.
La storia salvata dentro .git.
Questo è tutto Git.
Capito questo, il resto è solo sintassi.
Questa è la parte che nessuno ti spiega, ma è ciò che ti dà una comprensione profonda.
Apri la cartella .git e troverai:
Cuore di Git.
Qui vengono salvati TUTTI gli oggetti Git:
Ogni oggetto è identificato da un hash SHA-1.
Esempio di struttura:
jsxGit salva gli oggetti compressi e deduplicati:
se due file sono uguali → Git salva un solo blob.
Contiene i puntatori ai branch e ai tag.
Esempi:
jsxUn branch è solo un file di testo che contiene l’hash dell’ultimo commit!
Un file che dice “dove sei”:
jsxSe HEAD punta direttamente a un hash → sei in “detached HEAD state”.
È la staging area.
È una struttura binaria che contiene:
È grazie a questa struttura che Git sa cosa è cambiato.
Script che si attivano su eventi (pre-commit, pre-push…).
Se vuoi automatizzare qualcosa, questo è il posto giusto.
Configurazione del repository:
Mostra:
È il comando più importante.
Aggiunge file allo staging:
jsxjsxTi consigliamo di utilizzare il conventional commit
Ricrea l’ultimo commit:
jsx⚠️ Cambia la hash → non usarlo dopo un push senza sapere cosa fai.
Visualizza la storia come un pro:
jsxUn branch è solo un file di testo che contiene un hash.
Crearlo:
jsxSwitch:
jsxUnisce due branch → crea un commit “merge”.
Storia più realistica ma più “rumorosa”.
Riscrive la storia come se il tuo branch fosse partito da uno stato più recente.
Pulitissimo:
jsx⚠️ Rebase riscrive la storia → evitare su branch condivisi.
Pulire la storia è ciò che distingue un dev junior da uno senior.
jsx
Puoi:
Serve per creare una storia pulita e leggibile prima di aprire una PR.
Vuoi un commit da un altro branch?
jsxVuoi applicare una PR senza fare merge?
Scarica la patch:
jsxApplicala:
jsxPerfetta per review offline o hotfix veloci.
I remote non sono “server GitHub”. Sono semplicemente percorsi verso altri repository.
Lista:
jsxPush:
jsxFetch:
jsxPull = fetch + merge (o rebase se configurato).
Anche se elimini un branch, modifichi la storia o resetti tutto… Git ricorda tutto.
jsxPuoi recuperare commit persi, branch cancellati, errori di rebase.
Mostra ogni operazione che ha spostato HEAD.
👉 Se un collega sbaglia comando, con reflog potete ricostruire esattamente cosa è successo: chi ha fatto cosa, quando, e verso quale commit si è spostata la storia.
È il comando che salva vite.
Mantiene tutto in staging.
Mantiene tutto in working directory.
Butta via tutto e torna allo stato precedente.
Esempio:
jsxOcchio: è definitivo (ma reflog può salvarti).
La GUI è super utile, ma solo dopo che hai capito:
Usare Git senza capire Git porta a paura, errori e PR incasinate. Capire Git → libertà totale.
Learn Git Branching è uno dei migliori strumenti interattivi per imparare Git in modo visuale.
Simula un vero repository Git e ti permette di vedere graficamente cosa succede quando esegui i comandi.

Pro Git è il libro ufficiale su Git, scritto da Scott Chacon e Ben Straub, ed è completamente gratuito. Copre tutto: dalle basi (commit, branch, merge) fino ai meccanismi interni del sistema (oggetti, hashing, reflog, protocolli di rete).
Testa reset, rebase, reflog, patch, tutto senza paura.
Capire Git non ti rende solo uno sviluppatore migliore. Ti rende:
Hai dubbi o vuoi saperne di più su git? Entra nella nostra community Discord