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.

Comandi Descrizione
git init avvia 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-branch Clona un singolo ramo
git add file.txt aggiunge (fasi) file.txt al git
git add * aggiunge(stages) tutte le nuove modifiche, cancellazioni, creazioni al git
git reset file.txt Rimuove il file.txt dallo stage
git reset --hard Rimuove tutte le modifiche non commesse, resetta i file in HEAD
git rm file.txt Rimuove il file.txt sia da git che dal file system
git rm --cached file.txt rimuove solo il file.txt sia dall’indice git
git status mostra le modifiche e le cose che non sono ancora in scena
git branch mostra tutti i rami (il ramo corrente è mostrato con una stella)
git branch my-branch crea il mio ramo
git branch -d my-branch cancella my-branch
git checkout mio-ramo passa al mio-ramo
git merge my-branch unisce my-branch al ramo corrente
git push origin --delete my-branch elimina 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 -vv elenca tutti i rami e i loro upstream, così come l’ultimo commit sul ramo
git branch -a elenca 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 remote mostra i telecomandi
git remote -v mostra 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-remote Rimuove un remoto
git log mostra il log dei commit
git log --oneline mostra 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> –oneline elenca 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 --amend combina le modifiche con il commit precedente, o modifica il messaggio di commit precedente senza cambiare il suo snapshot
git commit --amend --no-edit modifica 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-branch spinge i commit al my-remote nel my-branch (non spinge i tag)
git revert Annulla un commit creando un nuovo commit
git show mostra uno o più oggetti (blob, alberi, tag e commit).
git diff mostra i cambiamenti tra i commit, i commit e l’albero di lavoro
git diff –color mostra i diff colorati
git diff –staged Mostra i cambiamenti in fase di commit
git tag mostra tutti i tag
git tag -a v1.0 -m “msg” crea un tag annotato
git show v1.0 mostra la descrizione del tag version-1.0
git tag –delete v1.0 cancella il tag nella directory locale
git push –delete my-remote v1.0 cancella il tag in my-remote (attenzione a non cancellare un ramo)
git push my-remote my-branch v1.0 spinge il tag v1.0 a my-remote in my-branch
git fetch –tags tira i tag da remoto
git pull my-remote my-branch tira e cerca di unire my-branch da my-remote al ramo corrente
git stash mette da parte i cambiamenti messi in scena e non messi in scena (lo stato di git sarà pulito dopo)
git stash -u salva tutto, inclusi i nuovi file non tracciati (ma non .gitignore)
git stash save “msg” salva con un msg
git stash list elenca tutti gli stash
git stash pop cancella lo stash recente e lo applica
git stash pop [email protected]{2} cancella lo stash {2} e lo applica
git stash show mostra la descrizione dello stash
git stash apply mantiene 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 clear cancella tutto lo stash
git rebase -i <commit_id> Rebase i commit da un ID di commit
git rebase –abort Interrompe un rebase in corso
git rebase –continue Continua il rebase dopo aver risolto tutti i conflitti
git clean -f pulisce permanentemente i file non tracciati
git clean -f -d/git clean -fd Per rimuovere permanentemente le directory
git clean -f -X/git clean -fX Per rimuovere definitivamente i file ignorati
git clean -f -x/git clean -fx Per rimuovere definitivamente i file ignorati e non ignorati
git config –global –list elenca la configurazione git per tutti i repo
git config –global –edit apre 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