git-scm

È uno strumento per il controllo di versione creato da Linus Torvalds nel 2005.

Effettuare una diff su un'unica riga

Invece di mostrare due linee per ogni cambiamento, Git permete di evidenziarli esplicitamente su una riga:

git diff --word-diff nome_file

blame prima di una specifica commit

git blame id_commit~1 -- nome_file

Rimuovere i vecchi branch remoti eliminati sul server

Se sul server non risultano più dei branch, è possibile rimuoverli localmente usando il seguente comando:

git fetch origin --prune

Come fare a sapere se un branch è mergiato su master

Questi comandi si applicano solo ai branch locali. Il flag -a mostra sia i branch locali che remoti, e il flag -r mostra solo i branch remoti.

Come vedere quali commit sono presenti in un branch piuttosto che in un altro

Si suppone di avere un branch develop e un branch feature, si vuole sapere quali commit sono presenti in develop che non sono presenti in feature:

git log --oneline develop ^feature

oppure:

git log feature..develop

Da notare che i due branch sono invertiti rispetto al primo comando

Come vedere se una commit è contenuta in un branch

Ci si può arrivare eseguendo il comando qui sotto che mostra tutti i branch che contengono quella commit:

git branch --contains <commit>

cgit: il branch predefinito

Si immagini di avere tre branch: master, svil e test. Tutto lo sviluppo viene effettuato sul branch svil e master si trova notevolmente indietro. Su GitHub, tramite l'interfaccia web, si può impostare qualsiasi altro branch predefinito al posto di master, ma se il server è gestito tramite cgit, come si può eliminare il branch master?

Non è poi così difficile, basta entrare nel repository, ad esempio repo.git, nel quale ci saranno i calssici file:

branches
config
description
HEAD
hooks
info
objects
refs

Il contenuto di HEAD dovrebbe essere qualcosa come:

ref: refs/heads/master

Come si può notare, punta a master. Evitare di modificarlo a mano ed eseguire il comando git usando l'argomento symbolic-ref:

$ git symbolic-ref HEAD refs/heads/test

Se non si ha intenzione di ripristinare il branch predefinito su master, bisognerebbe eseguire il symbolic-ref anche nella copia locale del repository. Da adesso in avanti, cgit userà test come branch predefinito, anche quando si effettuerà un clone.

Per procedere alla rimozione del branch master, si esegue il solito comando di eliminazione:

$ git branch -d master
$ git push origin :master

O se si preferisce, il secondo comando può essere sostituito con:

$ git push --delete origin master