Introduzione

I team di sviluppatori e manutentori di software open source gestiscono in genere i loro progetti tramite Git, un sistema di controllo della versione distribuito che supporta la collaborazione.

Questa guida fornisce un rapido riferimento a comandi utili per lavorare e collaborare in un repository Git.

Installare e inizializzare

Controlla la tua versione di Git con il seguente comando, che confermerà anche che Git è installato.

git --version

È possibile inizializzare la directory di lavoro corrente come repository Git con il comando init.

git init

Per copiare un repository Git esistente ospitato in remoto, verrà utilizzato git clone con l'URL del repository o la posizione del server (in quest'ultimo caso verrà utilizzato ssh).

git clone https://www.github.com/username/repo-name

Mostra il repository remoto della tua directory Git corrente.

git remote

Per un output più dettagliato, utilizzare il flag -v.

git remote -v

Aggiungi Git upstream, che può essere un URL o può essere ospitato su un server (in quest'ultimo caso, connettiti con ssh).

git remote add upstream https://www.github.com/username/repo-name

Staging

Quando hai modificato un file e lo hai contrassegnato per il prossimo commit, viene considerato un file a fasi.

Controlla lo stato del tuo repository Git, inclusi i file che non sono in stage "not staged" e i file staged.

git status

Per mettere i file modificati in stato di stage, utilizzare il comando add, che è possibile eseguire più volte prima di un commit. Se si apportano modifiche successive che si desidera includere nel commit successivo, è necessario eseguire nuovamente add.

È possibile specificare il file specifico con add.

git add my_script.py

Con . puoi aggiungere tutti i file nella directory corrente inclusi i file che iniziano con a ..

git add .

È possibile rimuovere un file dalla gestione temporanea mantenendo le modifiche all'interno della directory di lavoro con reset.

git reset my_script.py

Committing

Una volta che i file sono staged, sei pronto per il commit, che registrerà le modifiche che hai apportato al repository.

Per eseguire il commit di file in fasi, eseguirai il comando commit con il tuo messaggio di commit significativo in modo da poter tenere traccia dei commit.

git commit -m "Commit message"

È possibile condensare la gestione temporanea di tutti i file monitorati eseguendo il commit in un solo passaggio.

git commit -am "Commit message"

Se è necessario modificare il messaggio di commit, è possibile farlo con il flag --amend.

git commit --amend -m "New commit message"

Branches

Un branch in Git è un puntatore mobile a uno dei commit nel repository, ti consente di isolare il lavoro e gestire lo sviluppo e le integrazioni delle funzionalità. Puoi saperne di più sui branches leggendo la documentazione di Git.

Elenca tutti i branches  correnti con il comando branch. Un asterisco (*) verrà visualizzato accanto al branch attualmente attivo.

git branch

Crea un nuovo branch. Rimarrai sul branch attualmente attivo fino a quando non passerai a quello nuovo.

git branch new-branch

Passare a qualsiasi branch esistente e verificarlo nella directory di lavoro corrente.

git checkout another-branch

È possibile consolidare la creazione e il checkout di un nuovo branch  utilizzando il flag -b.

git checkout -b new-branch

Rinomina il nome della tua branch.

git branch -m current-branch-name new-branch-name

Unisci la cronologia del branch specificato in quella in cui stai attualmente lavorando.

git merge branch-name

Annullare l'unione, in caso di conflitti.

git merge --abort

Puoi anche selezionare un particolare commit con cui unirti, utilizzando la stringa che fa riferimento al commit specifico, con il comando cherry-pick.

git cherry-pick f7649d0

Dopo aver unito un branch e non è più necessario, è possibile eliminarlo.

git branch -d branch-name

Se non hai unito un branch a main, ma sei sicuro di volerlo eliminare, puoi forzarne l'eliminazione.

git branch -D branch-name

Collaborare e aggiornare

Per scaricare le modifiche da un altro repository, come l'upstream remoto, utilizzerai il comando fetch.

git fetch upstream

Unisci i commit recuperati. Si noti che alcuni repository potrebbero utilizzare master invece di main.

git merge upstream/main

Effettua il push o la trasmissione dei commit dei branch locali nel branch del repository remoto.

git push origin main

Recupera e unisci qualsiasi commit dal branch remoto di tracciamento.

git pull

Ispezionare

Visualizza la cronologia di commit per il branch attualmente attivo.

git log

Mostra i commit che hanno cambiato un determinato file. Ciò segue il file indipendentemente dalla ridenominazione del file.

git log --follow my_script.py

Mostra i commit che si trovano su un branch e non sull'altro. Questo comando mostrerà i commit presenti sul branch a-branch e che non sono attivi sul branch b-branch.

git log a-branch..b-branch

Guarda i log di riferimento (reflog) per vedere quando i suggerimenti dei branch e altri riferimenti sono stati aggiornati per l'ultima volta all'interno del repository.

git reflog

Mostra qualsiasi oggetto in Git tramite la sua stringa di commit o hash in un formato più leggibile dall'uomo (human-readable).

git show de754f5

Mostrare le modifiche

Il comando git diff mostra le modifiche tra commit, branch e altro. Puoi leggerlo più dettagliatamente nella documentazione di Git.

Confronta i file modificati che si trovano nell'area di gestione temporanea.

git diff --staged

Mostra il diff di ciò che è dentro al branch a-branch ma non è dentro al branch b-branch.

git diff a-branch..b-branch

Mostra la differenza tra due commit specifici.

git diff 61ce3e6..e221d9c

Stashing

A volte scoprirai di aver apportato modifiche ad alcuni codici, ma prima di finire devi iniziare a lavorare su qualcos'altro. Non sei ancora pronto per impegnare le modifiche che hai apportato finora, ma non vuoi perdere il lavoro. Il comando git stash ti consentirà di salvare le modifiche locali e tornare alla directory di lavoro in linea con il commit più recente HEAD.

Riponi (Stash) il tuo lavoro attuale.

git stash

Guarda cosa hai attualmente nascosto (Stashed).

git stash list

I stashes saranno nominati [email protected]{0}, [email protected]{1} e così via.

Mostra informazioni su un particolare stash.

git stash show [email protected]{0}

Per estrarre i file nello stash corrente fuori dallo stash mantenendo comunque lo stesso stash, utilizzare il comando apply.

git stash apply [email protected]{0}

Se si desidera estrarre i file da uno stash e successivamente questo non è più necessario, utilizzare il comando pop.

git stash pop [email protected]{0}

Se non hai più bisogno dei file salvati in un determinato stash, puoi farlo drop.

git stash drop [email protected]{0}

Se hai più stashes salvati e non è più necessario utilizzarli, puoi rimuoverle con il comando clear.

git stash clear

Ignorare i file

Se si desidera mantenere i file nella directory Git locale, ma non si desidera impegnarli nel progetto, è possibile aggiungere questi file al file .gitignore in modo che non causino conflitti.

Utilizzare un editor di testo come nano o vim per aggiungere file al file .gitignore.

nano .gitignore

Rebasing

Un rebase ci consente di spostare i branches cambiando il commit su cui si basano. Con il rebasing, puoi annullare o riformulare i commit.

Puoi iniziare un rebase chiamando il numero di commit che hai effettuato e che vuoi rebase (5 nel caso seguente).

git rebase -i HEAD~5

In alternativa, puoi fare il rebase basandoti su una particolare stringa di commit o hash.

git rebase -i 074a4e5

Dopo aver eseguito il commit o la riformulazione dei commit, è possibile completare il rebase del branch in cima all'ultima versione del codice upstream del progetto. Si noti che alcuni repository potrebbero utilizzare master invece di main.

git rebase upstream/main

Revert e ripristino

È possibile ripristinare le modifiche apportate a un determinato commit utilizzando revert. Il tuo albero di lavoro dovrà essere pulito per raggiungere questo obiettivo.

git revert 1fc6665

A volte, anche dopo un rebase, è necessario ripristinare l'albero di lavoro. È possibile ripristinare un determinato commit ed eliminare tutte le modifiche, con il seguente comando.

git reset --hard 1fc6665

Per forzare il push del tuo ultimo commit non in conflitto noto nel repository di origine, dovrai utilizzare --force.

Attenzione: la forzatura verso il branch principale master è spesso disapprovata a meno che non ci sia una ragione davvero importante per farlo. Usare con parsimonia quando si lavora sui propri repository e cercare di evitarlo quando si collabora con un team.
git push --force origin main

Per rimuovere file e sottodirectory locali non tracciati dalla directory Git per un branch funzionante pulito, è possibile utilizzare git clean.

git clean -f -d

Se è necessario modificare il repository locale in modo che assomigli al branch principale upstream corrente (ovvero, se ci sono troppi conflitti), è possibile eseguire un hard reset.

Nota: l'esecuzione di questo comando farà apparire il repository locale esattamente come l'upstream. Ogni commit che hai fatto ma che non è stato caricato (pulled) verrà distrutto.
git reset --hard upstream/main

Conclusione

Questa guida copre alcuni dei comandi Git più comuni che è possibile utilizzare durante la gestione dei repository e la collaborazione sul software.

Per ulteriori informazioni leggere questo tutorial: Git - semplice guida.

Ci sono molti altri comandi e varianti che potresti trovare utili come parte del tuo lavoro con Git. Per ulteriori informazioni su tutte le opzioni disponibili, è possibile eseguire quanto segue per ricevere informazioni utili.

git --help