1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
<h1>git-scm</h1>
<p>È uno strumento per il controllo di versione creato da Linus Torvalds nel 2005.</p>
<h2>Effettuare una diff su un'unica riga</h2>
<p>Invece di mostrare due linee per ogni cambiamento, Git permete di
evidenziarli esplicitamente su una riga:</p>
<pre class="bordered">git diff --word-diff nome_file</pre>
<h2>blame prima di una specifica commit</h2>
<pre class="bordered">git blame id_commit~1 -- nome_file</pre>
<h2>Rimuovere i vecchi branch remoti eliminati sul server</h2>
<p>Se sul server non risultano più dei branch, è possibile
rimuoverli localmente usando il seguente comando:</p>
<pre>git fetch origin --prune</pre>
<h2>Come fare a sapere se un branch è mergiato su master</h2>
<p>
<ul>
<li><code>git branch --merged master</code> mostra i branch mergiati su
master</li>
<li><code>git branch --merged</code> mostra i branch mergiati su HEAD</li>
<li><code>git branch --no-merged</code> mostra i branch che non sono stati
ancora mergiati</li>
</ul>
Questi comandi si applicano solo ai branch locali. Il flag <code>-a</code>
mostra sia i branch locali che remoti, e il flag <code>-r</code> mostra solo
i branch remoti.
</p>
<h2>Come vedere quali commit sono presenti in un branch piuttosto che in un
altro</h2>
<p>Si suppone di avere un branch <i>develop</i> e un branch <i>feature</i>, si
vuole sapere quali commit sono presenti in <i>develop</i> che non sono
presenti in <i>feature</i>:</p>
<pre>git log --oneline develop ^feature</pre>
<p>oppure:</p>
<pre>git log feature..develop</pre>
<p>Da notare che i due branch sono invertiti rispetto al primo comando</p>
<h2>Come vedere se una commit è contenuta in un branch</h2>
<p>Ci si può arrivare eseguendo il comando qui sotto che mostra tutti i
branch che contengono quella commit:</p>
<pre>git branch --contains <commit></pre>
<h2>cgit: il branch predefinito</h2>
<p>Si immagini di avere tre branch: <i>master</i>, <i>svil</i> e <i>test</i>.
Tutto lo sviluppo viene effettuato sul branch <i>svil</i> e <i>master</i> si
trova notevolmente indietro. Su GitHub, tramite l'interfaccia web, si
può impostare qualsiasi altro branch predefinito al posto di
<i>master</i>, ma se il server è gestito tramite cgit, come si
può eliminare il branch <i>master</i>?</p>
<p>Non è poi così difficile, basta entrare nel repository, ad
esempio <i>repo.git</i>, nel quale ci saranno i calssici file:</p>
<pre class="bordered">branches
config
description
HEAD
hooks
info
objects
refs</pre>
<p>Il contenuto di <i>HEAD</i> dovrebbe essere qualcosa come:</p>
<pre class="bordered">ref: refs/heads/master</pre>
<p>Come si può notare, punta a <i>master</i>. Evitare di modificarlo a
mano ed eseguire il comando git usando l'argomento <i>symbolic-ref</i>:</p>
<pre class="bordered">$ git symbolic-ref HEAD refs/heads/test</pre>
<p>Se non si ha intenzione di ripristinare il branch predefinito su
<i>master</i>, bisognerebbe eseguire il symbolic-ref anche nella copia locale
del repository. Da adesso in avanti, cgit userà <i>test</i> come branch
predefinito, anche quando si effettuerà un clone.</p>
<p>Per procedere alla rimozione del branch <i>master</i>, si esegue il solito
comando di eliminazione:</p>
<pre class="bordered">$ git branch -d master
$ git push origin :master
</pre>
<p>O se si preferisce, il secondo comando può essere sostituito con:</p>
<pre class="bordered">$ git push --delete origin master</pre>
|