Version Control con Git: Guida Completa
“`html
Il controllo delle versioni è un elemento fondamentale nello sviluppo software moderno, e Git è lo strumento più diffuso per gestirlo in modo efficiente. Se sei un programmatore, un sistemista o un project manager, conoscere Git non è solo utile, ma spesso indispensabile per lavorare in team, tracciare le modifiche al codice e garantire la stabilità dei progetti.
Ti sta piacendo questo articolo?
Iscriviti per ricevere aggiornamenti esclusivi!
In questa guida completa su Version Control con Git, esploreremo tutto ciò che serve per padronizzare questo strumento, dalle basi ai concetti avanzati. Che tu stia iniziando da zero o voglia approfondire funzionalità come branching, merging o risoluzione dei conflitti, qui troverai spiegazioni chiare ed esempi pratici.
Culture Digitali, con anni di esperienza nella formazione ICT per professionisti e aziende, ti accompagna in questo percorso. Scoprirai non solo come usare Git, ma anche le migliori pratiche per integrarlo nei workflow aziendali, migliorando la collaborazione e riducendo gli errori.
Se lavori in una PMI, in una PA o in un team distribuito, questa guida ti aiuterà a capire perché Git è lo standard de facto per il version control e come sfruttarlo al meglio nei tuoi progetti. Pronti a iniziare?
“`
Introduzione al Version Control
“`html
Introduzione al Version Control
Il version control, o controllo versione, è un sistema che registra le modifiche apportate a file e cartelle nel tempo, permettendo di recuperare versioni precedenti, confrontare cambiamenti e collaborare in modo efficiente. In ambito digitale, è uno strumento fondamentale per sviluppatori, team di progetto e aziende che lavorano su documenti, codice sorgente o risorse condivise.
Git è il sistema di version control più diffuso al mondo, grazie alla sua flessibilità, velocità e capacità di gestire progetti di qualsiasi dimensione. Che tu sia uno sviluppatore software, un project manager o un professionista che lavora su documenti tecnici, comprendere i principi del version control con Git ti permetterà di:
- Tenere traccia di ogni modifica, evitando perdite di dati;
- Collaborare senza conflitti con altri membri del team;
- Ripristinare versioni precedenti in caso di errori;
- Organizzare il lavoro con branch e merge strategici.
In questa guida, esploreremo come Git rivoluziona la gestione dei progetti digitali, offrendo una panoramica chiara e pratica per iniziare a utilizzarlo con sicurezza. Se vuoi approfondire con formazione mirata, contattaci per scoprire i nostri corsi su misura.
“`
Cos’è il Version Control?
“`html
Cos’è il Version Control?
Il Version Control (controllo versione) è un sistema che registra le modifiche apportate a file o progetti nel tempo, permettendo di recuperare versioni precedenti, confrontare le differenze e collaborare in modo efficiente. È uno strumento fondamentale per sviluppatori, team di lavoro e aziende che gestiscono progetti digitali, come software, documenti o siti web.
Grazie al Version Control, è possibile:
- Tracciare ogni modifica con precisione,
- Lavorare in parallelo senza sovrascrivere il lavoro altrui,
- Ripristinare versioni stabili in caso di errori.
In ambito professionale, strumenti come Git sono essenziali per garantire sicurezza, tracciabilità e collaborazione efficiente.
“`
Perché Git è importante per gli sviluppatori?
“`html
Perché Git è importante per gli sviluppatori?
Git è uno strumento fondamentale per gli sviluppatori perché consente di gestire il codice in modo efficiente e collaborativo. Con Git, è possibile tracciare ogni modifica apportata al progetto, tornando indietro se necessario e mantenendo una cronologia completa delle versioni. Questo sistema di version control facilita il lavoro di squadra, permettendo a più sviluppatori di lavorare sullo stesso progetto senza sovrascrivere il lavoro altrui.
Inoltre, Git offre funzionalità avanzate come il branching e il merging, che consentono di sperimentare nuove funzionalità senza compromettere il codice principale. Questo è particolarmente utile in ambienti professionali, dove la stabilità e la qualità del codice sono prioritarie. Grazie a Git, gli sviluppatori possono lavorare in modo più organizzato, riducendo errori e migliorando la produttività.
Per le aziende e i team di sviluppo, adottare Git significa anche migliorare la collaborazione e la trasparenza, rendendo più semplice la gestione di progetti complessi. Se vuoi approfondire l’uso di Git o hai bisogno di formazione specifica, contattaci per una consulenza su misura.
“`
Installazione e Configurazione di Git
“`html
Installazione e Configurazione di Git
Per iniziare a utilizzare Git, il primo passo è l’installazione sul proprio sistema. Git è compatibile con i principali sistemi operativi, tra cui Windows, macOS e Linux. Ecco come procedere:
Installazione di Git
- Windows: Scarica l’installer ufficiale dal sito git-scm.com e segui le istruzioni guidate. Assicurati di selezionare l’opzione per aggiungere Git al PATH durante l’installazione.
- macOS: Puoi installare Git tramite Homebrew con il comando
brew install gito scaricare il pacchetto dal sito ufficiale. - Linux: Utilizza il gestore pacchetti della tua distribuzione. Ad esempio, su Ubuntu, esegui
sudo apt-get install git.
Configurazione Iniziale
Dopo l’installazione, è fondamentale configurare Git con le tue informazioni personali. Apri il terminale e esegui i seguenti comandi:
git config --global user.name "Il Tuo Nome": Imposta il nome utente che verrà associato ai tuoi commit.git config --global user.email "tua@email.com": Imposta l’indirizzo email associato ai tuoi commit.
Questi dati sono essenziali per identificare chi ha effettuato le modifiche nel repository. Per verificare la configurazione, puoi usare il comando git config --list.
Con Git installato e configurato, sei pronto per iniziare a gestire i tuoi progetti con il version control. Se hai bisogno di supporto o desideri approfondire le tue competenze, contattaci per una consulenza su misura.
“`
Come installare Git su diversi sistemi operativi
“`html
Come installare Git su diversi sistemi operativi
Installare Git è semplice e varia leggermente a seconda del sistema operativo. Ecco le procedure principali:
- Windows: scarica l’installer ufficiale da git-scm.com e segui la procedura guidata.
- macOS: puoi usare Homebrew con il comando
brew install gito scaricare il pacchetto dal sito ufficiale. - Linux (Debian/Ubuntu): apri il terminale e digita
sudo apt-get install git.
Dopo l’installazione, verifica la corretta configurazione con git --version.
“`
Configurazione iniziale di Git
“`html
Configurazione iniziale di Git
Prima di iniziare a utilizzare Git, è fondamentale configurare correttamente l’ambiente di lavoro. Questo passaggio permette di personalizzare le impostazioni di base e garantire che le operazioni siano tracciabili e coerenti.
Il primo passo consiste nell’impostare il nome utente e l’indirizzo email, che verranno associati a ogni commit. Apri il terminale ed esegui i seguenti comandi:
git config --global user.name "Il Tuo Nome"git config --global user.email "tua@email.com"
Queste informazioni sono essenziali per identificare chi ha effettuato le modifiche nel repository. Inoltre, puoi configurare l’editor di testo predefinito per i messaggi di commit, ad esempio:
git config --global core.editor "code --wait"(per Visual Studio Code)
Con queste semplici impostazioni, il tuo ambiente Git è pronto per essere utilizzato in modo efficace. Per ulteriori personalizzazioni o per risolvere dubbi specifici, contattaci per una consulenza su misura.
“`
Concetti Fondamentali di Git
“`html
Concetti Fondamentali di Git
Git è uno strumento di version control che consente di tracciare le modifiche al codice sorgente e di collaborare in modo efficiente con altri sviluppatori. Per utilizzarlo al meglio, è importante comprendere alcuni concetti chiave che ne definiscono il funzionamento.
Repository
Un repository (o repo) è il cuore di Git: è una directory che contiene tutti i file del progetto e la cronologia delle modifiche. Può essere locale, sul proprio computer, o remoto, ospitato su piattaforme come GitHub, GitLab o Bitbucket. I repository remoti permettono di condividere il codice e di lavorare in team, sincronizzando le modifiche tra diversi sviluppatori.
Commit
Un commit rappresenta uno snapshot delle modifiche apportate ai file del progetto. Ogni commit è identificato da un hash univoco e contiene un messaggio descrittivo che spiega le modifiche effettuate. I commit permettono di tornare indietro nel tempo, ripristinando versioni precedenti del codice se necessario. Una buona pratica è scrivere messaggi di commit chiari e concisi, per facilitare la collaborazione e il debugging.
Branch
I branch sono rami paralleli di sviluppo che permettono di lavorare su nuove funzionalità o correzioni senza interferire con il codice principale (solitamente il branch main o master). Una volta completate le modifiche, è possibile unire (merge) il branch nel ramo principale. Questo meccanismo è fondamentale per gestire flussi di lavoro complessi e per isolare le modifiche sperimentali.
Merge e Rebase
Il merge è l’operazione che unisce due branch, incorporando le modifiche di uno nell’altro. Il rebase, invece, riapplica i commit di un branch su un altro, creando una cronologia lineare. Entrambe le operazioni sono utili, ma il rebase è spesso preferito per mantenere una storia dei commit più pulita e ordinata.
Remote e Push/Pull
Un remote è una versione del repository ospitata su un server. Le operazioni di push e pull permettono rispettivamente di inviare le modifiche locali al repository remoto e di scaricare le modifiche dal remoto al locale. Queste operazioni sono essenziali per la collaborazione in team, garantendo che tutti i membri abbiano accesso all’ultima versione del codice.
Comprendere questi concetti è il primo passo per utilizzare Git in modo efficace. Se vuoi approfondire o hai bisogno di una formazione personalizzata, contattaci per scoprire i nostri corsi su Git e il version control.
“`
Repository
“`html
Repository
Un repository (o repo) è il cuore di Git: è lo spazio in cui vengono memorizzati tutti i file del progetto, insieme alla loro cronologia di modifiche. Può essere locale (sul tuo computer) o remoto (su piattaforme come GitHub o GitLab).
In un repository Git, ogni modifica viene tracciata come un commit, che rappresenta uno snapshot del progetto in un dato momento. Questo permette di:
- Tornare a versioni precedenti in caso di errori
- Collaborare con altri sviluppatori senza sovrascrivere il lavoro altrui
- Gestire branch paralleli per sviluppare nuove funzionalità
Culture Digitali offre corsi pratici per imparare a gestire repository Git in modo efficace, anche per team distribuiti.
“`
Commit
“`html
Commit
Il commit è l’operazione fondamentale in Git che salva le modifiche nel repository locale. Ogni commit rappresenta uno snapshot del progetto in un dato momento, con un messaggio descrittivo che ne spiega le modifiche.
Per eseguire un commit, utilizza il comando git commit -m "messaggio". È buona pratica scrivere messaggi chiari e concisi, come “Aggiunto modulo di login” o “Corretto bug nella funzione di ricerca”.
Culture Digitali consiglia di fare commit frequenti e atomici, ovvero che contengano modifiche piccole e coerenti, per facilitare il tracking e il debugging.
“`
Branch e Merge
“`html
Branch e Merge
I branch in Git permettono di lavorare su diverse versioni del codice in parallelo, isolando le modifiche fino a quando non sono pronte per essere integrate. Questo è fondamentale per gestire funzionalità, correzioni di bug o esperimenti senza interferire con il codice principale.
Il merge, invece, unisce i cambiamenti da un branch a un altro, tipicamente dal branch di sviluppo a quello principale (main o master). Una buona pratica è utilizzare pull request per revisionare il codice prima del merge, garantendo qualità e coerenza.
In Culture Digitali, insegnamo a gestire branch e merge in modo efficiente nei nostri corsi di Git, per evitare conflitti e ottimizzare il workflow di sviluppo.
“`
Comandi Principali di Git
“`html
Comandi Principali di Git
Git è uno strumento potente per il version control, e padronneggiare i suoi comandi principali è essenziale per gestire efficacemente i progetti software. Di seguito, esploriamo i comandi fondamentali che ogni sviluppatore dovrebbe conoscere, con esempi pratici per facilitarne l’apprendimento.
1. Configurazione Iniziale
Prima di iniziare a lavorare con Git, è necessario configurare il proprio ambiente. I comandi seguenti impostano il nome utente e l’indirizzo email, che saranno associati ai tuoi commit:
git config --global user.name "Il Tuo Nome"git config --global user.email "tua.email@example.com"
Queste informazioni sono cruciali per mantenere la tracciabilità delle modifiche nel repository.
2. Creazione e Clonazione di un Repository
Per iniziare un nuovo progetto con Git, puoi creare un nuovo repository o clonare uno esistente:
git init: Inizializza un nuovo repository Git nella directory corrente.git clone [url]: Clona un repository esistente dal server remoto alla tua macchina locale.
Ad esempio, git clone https://github.com/utente/repository.git scaricherà una copia del repository specificato.
3. Gestione delle Modifiche
Una volta apportate le modifiche ai file, è necessario aggiungerle all’area di staging e poi committarle:
git add [file]: Aggiunge un file specifico all’area di staging.git add .: Aggiunge tutti i file modificati all’area di staging.git commit -m "Messaggio di commit": Registra le modifiche nel repository locale con un messaggio descrittivo.
Ad esempio, git commit -m "Aggiunto nuovo modulo di login" registra le modifiche con un messaggio chiaro.
4. Lavorare con i Branch
I branch sono essenziali per gestire diverse linee di sviluppo. Ecco i comandi principali:
git branch: Elenca tutti i branch locali.git branch [nome-branch]: Crea un nuovo branch.git checkout [nome-branch]: Passa a un branch specifico.git merge [nome-branch]: Unisce un branch al branch corrente.
Ad esempio, git checkout -b feature/login crea e passa a un nuovo branch chiamato “feature/login”.
5. Sincronizzazione con il Repository Remoto
Per sincronizzare il tuo lavoro con un repository remoto, utilizza i seguenti comandi:
git pull: Scarica le modifiche dal repository remoto e le unisce al branch locale.git push: Carica le modifiche locali sul repository remoto.
Ad esempio, git push origin main carica le modifiche sul branch “main” del repository remoto.
Padronneggiare questi comandi ti permetterà di gestire efficacemente i tuoi progetti con Git. Se desideri approfondire le tue competenze, contattaci per una consulenza su misura o scopri i nostri corsi di formazione dedicati al version control e alla gestione dei progetti software.
“`
git init
“`html
git init
Il comando git init crea un nuovo repository Git locale. Esegui questo comando nella directory del progetto per iniziare a tracciare le modifiche. Ad esempio:
git init
Questo inizializza una cartella .git nascosta, che contiene tutti i dati e la struttura necessari per il version control. È il primo passo per gestire il tuo progetto con Git.
“`
git clone
“`html
git clone
Il comando git clone permette di copiare un repository remoto in locale, creando una directory con tutti i file e la cronologia delle modifiche. È il primo passo per iniziare a lavorare su un progetto esistente.
Esempio: git clone https://github.com/nome-utente/nome-repo.git.
“`
git add
“`html
git add
Il comando git add è fondamentale per preparare i file modificati al commit. Aggiunge i cambiamenti all’area di staging, permettendoti di selezionare quali modifiche includere nel prossimo commit. Ad esempio, git add nomefile.txt aggiunge un file specifico, mentre git add . include tutte le modifiche nella directory corrente.
“`
git commit
“`html
Il comando git commit
Il comando git commit salva le modifiche apportate ai file nel repository locale, creando uno snapshot permanente della storia del progetto. Ogni commit include un messaggio descrittivo che spiega le modifiche effettuate, facilitando la tracciabilità e la collaborazione.
Per eseguire un commit, utilizzare:
git commit -m "Messaggio descrittivo delle modifiche"
Questo comando è fondamentale per mantenere una cronologia chiara e organizzata delle evoluzioni del codice.
“`
git status
“`html
git status
Il comando git status è fondamentale per monitorare lo stato del repository. Mostra quali file sono stati modificati, aggiunti o rimossi, e se sono pronti per il commit. È utile per evitare errori e mantenere il controllo sulle modifiche.
“`
git branch
“`html
git branch
Il comando git branch è fondamentale per gestire i rami nel tuo repository. Con esso puoi:
- Visualizzare tutti i branch locali (
git branch), - Creare un nuovo branch (
git branch nome-branch), - Eliminare un branch (
git branch -d nome-branch).
È lo strumento base per organizzare il lavoro in parallelo e isolare le modifiche.
“`
git checkout
“`html
git checkout
Il comando git checkout è uno degli strumenti più versatili di Git. Permette di passare da un ramo all’altro, ripristinare file o cartelle a uno stato precedente, o creare nuovi rami. Ad esempio, per passare al ramo develop, basta digitare git checkout develop. È fondamentale per gestire il flusso di lavoro in team e mantenere l’integrità del codice.
“`
git merge
“`html
git merge
Il comando git merge unisce le modifiche di due branch in uno solo. È fondamentale per integrare il lavoro di più sviluppatori o per incorporare nuove funzionalità nel branch principale. Prima di eseguire il merge, assicurati che il branch di destinazione sia aggiornato con git pull.
Esempio: git merge nome-branch.
“`
Lavorare con Repository Remoti
“`html
Lavorare con Repository Remoti
Un repository remoto è una versione del progetto ospitata su un server esterno, come GitHub, GitLab o Bitbucket. Lavorare con repository remoti consente di collaborare con altri sviluppatori, sincronizzare il lavoro e mantenere un backup centralizzato del codice.
Clonare un Repository Remoto
Per iniziare a lavorare su un progetto esistente, è necessario clonare il repository remoto sul proprio computer locale. Il comando git clone crea una copia locale del repository, inclusi tutti i file e la cronologia delle modifiche.
git clone https://github.com/nome-utente/nome-repository.git
Sincronizzare le Modifiche
Dopo aver apportato modifiche locali, è importante sincronizzarle con il repository remoto. I comandi fondamentali sono:
git pull: scarica le modifiche dal repository remoto e le integra nel branch locale.git push: carica le modifiche locali sul repository remoto.
Prima di eseguire un git push, assicurati di aver eseguito un git pull per evitare conflitti.
Collaborare con Altri Sviluppatori
I repository remoti facilitano la collaborazione. È possibile creare branch separati per nuove funzionalità, correggere bug e unire le modifiche tramite pull request o merge request. Questo flusso di lavoro garantisce che il codice venga revisionato prima di essere integrato nel branch principale.
Per approfondire le best practice nell’uso di Git e dei repository remoti, contattaci per una consulenza su misura.
“`
git remote
“`html
Git Remote: Collaborare con Repository Esterni
Il comando git remote è fondamentale per gestire i collegamenti tra il tuo repository locale e quelli remoti, come GitHub o GitLab. Permette di sincronizzare il lavoro con altri sviluppatori, caricare modifiche o scaricare aggiornamenti.
Con git remote add puoi aggiungere un nuovo repository remoto, mentre git remote -v elenca quelli già configurati. Per scaricare le modifiche da un remote, usa git fetch seguito da git merge, oppure git pull per un’operazione combinata.
In ambito aziendale, la gestione corretta dei remote è cruciale per evitare conflitti e garantire la coerenza del codice. Culture Digitali offre consulenze specializzate per ottimizzare i flussi di lavoro con Git in team distribuiti.
“`
git push
“`html
git push
Il comando git push è fondamentale per condividere le modifiche locali con un repository remoto, come GitHub o GitLab. Dopo aver eseguito git commit, questo comando invia i cambiamenti al branch specificato, sincronizzando il lavoro con il team.
Per utilizzarlo, assicurati di essere sul branch corretto e digita:
git push origin nome-branch
Se il branch remoto non esiste, Git lo creerà automaticamente. Ricorda che git push richiede le credenziali di accesso al repository remoto.
In Culture Digitali, insegnamo a gestire git push in modo sicuro ed efficiente, evitando conflitti e garantendo la coerenza del codice. Scopri i nostri corsi di formazione su Git per PA e PMI.
“`
git pull
“`html
git pull
Il comando git pull è uno degli strumenti fondamentali per sincronizzare il tuo repository locale con quello remoto. In pratica, esegue due operazioni in sequenza: un git fetch (che scarica le modifiche dal repository remoto) seguito da un git merge (che unisce le modifiche nel tuo branch locale). Questo comando è essenziale quando lavori in team o su più dispositivi, poiché ti permette di aggiornare il tuo codice con le ultime modifiche condivise.
Per utilizzarlo, basta posizionarsi nella directory del progetto e digitare git pull origin nome-branch. Ad esempio, git pull origin main aggiornerà il tuo branch main con le ultime modifiche presenti sul repository remoto. Ricorda che è sempre una buona pratica eseguire un git pull prima di iniziare a lavorare su un nuovo task, per evitare conflitti futuri.
Se vuoi approfondire l’uso di Git e imparare a gestire al meglio il version control, contattaci per una consulenza su misura o scopri i nostri corsi di formazione dedicati.
“`
Best Practice per l’Uso di Git
“`html
Best Practice per l’Uso di Git
Adottare Git come sistema di version control richiede non solo la conoscenza dei comandi base, ma anche l’adozione di buone pratiche per garantire efficienza, collaborazione fluida e riduzione degli errori. Ecco alcune linee guida fondamentali:
- Commit frequenti e atomici: Esegui commit piccoli e mirati, ciascuno dedicato a una singola modifica o funzionalità. Questo semplifica il debugging e la revisione del codice.
- Messaggi di commit chiari: Usa messaggi descrittivi che spieghino il “perché” della modifica, non solo il “cosa”. Ad esempio: “Fix login bug per utenti non registrati” invece di “Bug fix”.
- Branching strategico: Utilizza branch separati per nuove feature, bugfix e sperimentazioni. Modelli come Git Flow o GitHub Flow aiutano a standardizzare il processo.
- Pull Request e Code Review: Prima di unire un branch, apri una Pull Request per permettere al team di revisionare il codice. Questo migliora la qualità e condivide la conoscenza.
- Sincronizzazione regolare: Aggiorna spesso il tuo branch locale con
git pullper evitare conflitti complessi durante il merge.
Queste pratiche, se integrate nel workflow quotidiano, trasformano Git da semplice strumento a vero alleato per lo sviluppo collaborativo. Per approfondire, contattaci per corsi di formazione su misura.
“`
Messaggi di Commit Efficaci
“`html
Messaggi di Commit Efficaci
Un messaggio di commit ben scritto è fondamentale per mantenere un progetto organizzato e comprensibile. Ecco alcune best practice:
- Sii conciso ma descrittivo: Usa una riga di massimo 50 caratteri per il titolo, seguita da un corpo più dettagliato se necessario.
- Usa il tempo presente: Ad esempio, “Aggiunge funzionalità di login” invece di “Ho aggiunto funzionalità di login”.
- Spiega il “perché”: Non solo cosa è stato cambiato, ma anche il motivo dietro la modifica.
- Evita messaggi generici: Come “Fix bug” o “Update code”. Sii specifico.
Seguire queste linee guida aiuta il team a capire rapidamente le modifiche e a collaborare in modo più efficiente.
“`
Gestione dei Branch
“`html
Gestione dei Branch
La gestione dei branch è una delle funzionalità più potenti di Git, che consente di lavorare su diverse versioni del codice in parallelo senza interferenze. Con i branch, è possibile sviluppare nuove funzionalità, correggere bug o sperimentare modifiche in modo isolato, mantenendo il codice principale stabile.
Per creare un nuovo branch, utilizza il comando git branch nome-branch, seguito da git checkout nome-branch per passare al nuovo branch. In alternativa, puoi usare git checkout -b nome-branch per creare e passare al nuovo branch in un unico comando.
Una volta completate le modifiche, puoi unire il branch al ramo principale con git merge nome-branch. È importante gestire i conflitti che possono emergere durante il merge, risolvendoli manualmente per garantire la coerenza del codice.
Culture Digitali offre corsi di formazione su Git e il version control, aiutandoti a padroneggiare queste tecniche per migliorare la collaborazione e l’efficienza nel tuo team di sviluppo.
“`
Domande Frequenti (FAQ)
Cos’è Git?
Git è un sistema di version control distribuito che consente agli sviluppatori di tracciare le modifiche al codice sorgente durante lo sviluppo del software.
Qual è la differenza tra Git e GitHub?
Git è un sistema di version control, mentre GitHub è una piattaforma basata su cloud che utilizza Git per la gestione dei repository e offre funzionalità aggiuntive come la collaborazione e la revisione del codice.
Come posso risolvere un conflitto di merge in Git?
Per risolvere un conflitto di merge, è necessario modificare manualmente i file interessati per risolvere le differenze, quindi eseguire git add per contrassegnare i file come risolti e infine eseguire git commit per completare il merge.
Cosa è un branch in Git?
Un branch in Git è una linea di sviluppo indipendente che consente di lavorare su nuove funzionalità o correzioni di bug senza influenzare il codice principale.
Come posso annullare un commit in Git?
È possibile annullare un commit utilizzando il comando git revert, che crea un nuovo commit che annulla le modifiche del commit specificato.
Contattaci
Contattaci per una consulenza su misura