Git è uno degli strumenti SCM più popolari. Può essere utilizzato per progetti grandi e piccoli ed è indipendente dai tipi di contenuto nei progetti. In effetti, usiamo git per gestire i contenuti dei capitoli di questo libro.

Git è diverso da altri strumenti SCM perché è distribuito, il che significa che non esiste un repository di codice centrale. Per questo motivo, git è diventato molto popolare per lo sviluppo di ciò che è noto come software libero e open source, o FOSS. La filosofia alla base di un sistema decentralizzato è che resiliente a un singolo punto di errore, il che aiuta a garantire che le biblioteche FOSS rimangano aperte e libere.

ComandiDescrizione
git initavvia git nella directory corrente
git clone <indirizzo>crea un repo git da un dato indirizzo (ottieni l’indirizzo dal tuo git-server)
git clone <indirizzo> -b <nome_branco> <path/to/directory>clona un repo git dall’indirizzo nella directory data e fa il checkout del ramo dato
git clone <indirizzo> -b <nome_ramo> --single-branchClona un singolo ramo
git add file.txtaggiunge (fasi) file.txt al git
git add *aggiunge(stages) tutte le nuove modifiche, cancellazioni, creazioni al git
git reset file.txtRimuove il file.txt dallo stage
git reset --hardRimuove tutte le modifiche non commesse, resetta i file in HEAD
git rm file.txtRimuove il file.txt sia da git che dal file system
git rm --cached file.txtrimuove solo il file.txt sia dall’indice git
git statusmostra le modifiche e le cose che non sono ancora in scena
git branchmostra tutti i rami (il ramo corrente è mostrato con una stella)
git branch my-branchcrea il mio ramo
git branch -d my-branchcancella my-branch
git checkout mio-ramopassa al mio-ramo
git merge my-branchunisce my-branch al ramo corrente
git push origin --delete my-branchelimina il mio ramo remoto
git branch -m <nome del nuovo ramo>rinomina il ramo
git checkout --orfano <nome_ramo>esegue il checkout di un ramo senza storia di commit
git branch -vvelenca tutti i rami e i loro upstream, così come l’ultimo commit sul ramo
git branch -aelenca tutti i rami locali e remoti
git cherry-pick <commit_id>unisce il commit specificato
git cherry-pick <commit_id_A>^..<commit_id_B>seleziona l’intero intervallo di commit dove A è più vecchio di B (la ^ è per includere anche A)
git remotemostra i telecomandi
git remote -vmostra il remoto per pull e push
git remote add my-remote <indirizzo>crea un remoto (prendi l’indirizzo dal tuo git-server)
git remote rm my-remoteRimuove un remoto
git logmostra il log dei commit
git log --onelinemostra il log dei commit, ogni commit in una singola linea
git log -p <nome_file>cambia nel tempo per uno specifico file
git log <Branch1> ^<Branch2>elenca i commit nel branch1 che non sono nel branch2
git log -n <x>elenca gli ultimi x commit
git log -n <x> –onelineelenca gli ultimi x commit, ogni commit in una singola linea
git grep --heading --line-number '<stringa/regex>'Trova le linee corrispondenti al pattern nei file tracciati
git log --grep='<stringa/regex>'Cerca il registro dei commit
git commit -m "msg"commette i cambiamenti con un msg
git commit --amendcombina le modifiche con il commit precedente, o modifica il messaggio di commit precedente senza cambiare il suo snapshot
git commit --amend --no-editmodifica un commit senza cambiare il suo messaggio di commit
git commit --amend --author='Nome Autore <[email protected]>'Modifica l’autore di un commit
git push my-remote my-branchspinge i commit al my-remote nel my-branch (non spinge i tag)
git revert Annulla un commit creando un nuovo commit
git showmostra uno o più oggetti (blob, alberi, tag e commit).
git diffmostra i cambiamenti tra i commit, i commit e l’albero di lavoro
git diff –colormostra i diff colorati
git diff –stagedMostra i cambiamenti in fase di commit
git tagmostra tutti i tag
git tag -a v1.0 -m “msg”crea un tag annotato
git show v1.0mostra la descrizione del tag version-1.0
git tag –delete v1.0cancella il tag nella directory locale
git push –delete my-remote v1.0cancella il tag in my-remote (attenzione a non cancellare un ramo)
git push my-remote my-branch v1.0spinge il tag v1.0 a my-remote in my-branch
git fetch –tagstira i tag da remoto
git pull my-remote my-branchtira e cerca di unire my-branch da my-remote al ramo corrente
git stashmette da parte i cambiamenti messi in scena e non messi in scena (lo stato di git sarà pulito dopo)
git stash -usalva tutto, inclusi i nuovi file non tracciati (ma non .gitignore)
git stash save “msg”salva con un msg
git stash listelenca tutti gli stash
git stash popcancella lo stash recente e lo applica
git stash pop [email protected]{2}cancella lo stash {2} e lo applica
git stash showmostra la descrizione dello stash
git stash applymantiene lo stash e lo applica al git
git stash branch my-branch [email protected]{1}crea un ramo dal tuo stash
git stash drop [email protected]{1}cancella lo stash {1}
git stash clearcancella tutto lo stash
git rebase -i <commit_id>Rebase i commit da un ID di commit
git rebase –abortInterrompe un rebase in corso
git rebase –continueContinua il rebase dopo aver risolto tutti i conflitti
git clean -fpulisce permanentemente i file non tracciati
git clean -f -d/git clean -fdPer rimuovere permanentemente le directory
git clean -f -X/git clean -fXPer rimuovere definitivamente i file ignorati
git clean -f -x/git clean -fxPer rimuovere definitivamente i file ignorati e non ignorati
git config –global –listelenca la configurazione git per tutti i repo
git config –global –editapre un editor per modificare il file git config
git config –global alias. aggiunge alias git per velocizzare il flusso di lavoro, ad esempio se handle è st e il comando è status allora eseguendo git st verrà eseguito git status