aboutsummaryrefslogtreecommitdiff
path: root/docs/git/git.rhtml
blob: d72c01f0165d918ecab83d67082517dee5a36562 (plain)
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>&Egrave; 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&ugrave; dei branch, &egrave; possibile
  rimuoverli localmente usando il seguente comando:</p>
<pre>git fetch origin --prune</pre>

<h2>Come fare a sapere se un branch &egrave; 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 &egrave; contenuta in un branch</h2>
<p>Ci si pu&ograve; arrivare eseguendo il comando qui sotto che mostra tutti i
  branch che contengono quella commit:</p>
<pre>git branch --contains &lt;commit&gt;</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&ograve; impostare qualsiasi altro branch predefinito al posto di
  <i>master</i>, ma se il server &egrave; gestito tramite cgit, come si
  pu&ograve; eliminare il branch <i>master</i>?</p>

<p>Non &egrave; poi cos&igrave; 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&ograve; 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&agrave; <i>test</i> come branch
  predefinito, anche quando si effettuer&agrave; 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&ograve; essere sostituito con:</p>
<pre class="bordered">$ git push --delete origin master</pre>