Git cheatsheet

Git è uno degli strumenti di controllo versione 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 blog.

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.

Qui di seguito un raccolta di comandi utili da utilizzare per git. Dedicato a chi come me è un po’ pigro!

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 ^ serve 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@address.com>'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 <commit-id>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 --tagsAggiorna i tag da remoto
git pull my-remote my-branchAggiorna 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 messaggio
git stash listElenca tutti gli stash
git stash popCancella lo stash recente e lo applica
git stash pop stash@{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 stash@{1}Crea un ramo dal tuo stash
git stash drop stash@{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 OPPURE 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.<handle> <comando>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