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 stash@{0}
, stash@{1}
e così via.
Mostra informazioni su un particolare stash.
git stash show stash@{0}
Per estrarre i file nello stash corrente fuori dallo stash mantenendo comunque lo stesso stash, utilizzare il comando apply
.
git stash apply stash@{0}
Se si desidera estrarre i file da uno stash e successivamente questo non è più necessario, utilizzare il comando pop
.
git stash pop stash@{0}
Se non hai più bisogno dei file salvati in un determinato stash, puoi farlo drop
.
git stash drop stash@{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