-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathlab_17.html
More file actions
213 lines (198 loc) · 14 KB
/
lab_17.html
File metadata and controls
213 lines (198 loc) · 14 KB
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
<!DOCTYPE html>
<html lang="en">
<head>
<title>Lab 17 - Git Immersion - Brought to you by EdgeCase</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta charset="utf-8">
<link rel="stylesheet" media="screen" href="reset.css">
<link rel="stylesheet" media="screen" href="screen.css">
<!--[if lt IE 9]>
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-1142510-7']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="html5.js"></script>
<script type="text/javascript" src="jquery.hotkeys.js"></script>
<script type="text/javascript" src="UI.js"></script>
</head>
<body data-lab-id="17">
<div id="pager">
<ul>
<li class="arrow next">
<a href="lab_18.html#main_content">Suivant</a>
</li>
<li class="arrow previous">
<a href="lab_16.html#main_content">Précédent</a>
</li>
<li class="index_button"><a href="#">Index</a></li>
</ul>
</div>
<header id="header">
<a href="index.html" id="home_link">Git Immersion</a>
<a href="http://edgecase.com" target="_blank" id="edgecase_link">Brought to you by EdgeCase</a>
<nav>
<ul>
<li class="arrow next">
<a href="lab_18.html#main_content">Suivant</a>
</li>
<li class="arrow previous">
<a href="lab_16.html#main_content">Précédent</a>
</li>
<li class="index_button"><a href="#">Index</a></li>
</ul>
</nav>
<div id="bookmark">Bookmark</div>
</header>
<div id="main_content">
<h1 class="lab_title"><em>lab 17</em> Enlever des commits d’une branche</h1>
<h3>Buts</h3>
<ul>
<li>Apprendre comment enlever les commits les plus récents d’une branche</li>
</ul>
<p>La commande <code>revert</code> de la section précédente est une commande puissante qui nous laisse défaire les effets de d’importe quel commit dans le dépôt. Cependant, à la fois le commit original et celui qui l’annule sont visibles dans l’historique de la branche (en utilisant la commande <code>git log</code>).</p>
<p>Souvent, nous faisons un commit et réalisons immédiatement que nous avons commis une erreur. Il pourrait être pratique d’avoir une commande de retour en arrière qui nous permette de faire comme si le mauvais commit n’avait jamais existé. Cette commande de retour en arrière devrait aussi pouvoir prévenir que le mauvais commit apparaisse dans l’historique de la commande <code>git log</code>. Ce serait comme si le mauvais commit n’avait jamais existé.</p>
<h2>La commande <code>reset</code> <em>01</em></h2>
<p>Nous avons déjà vu la commande <code>reset</code> et l’avons utilisé pour garder les fichiers en attente consistants avec un commit donné (nous avons utilisé le commit <span class="caps">HEAD</span> dans la précédente partie).</p>
<p>Quand nous donnons la référence d’un commit (comme un hash, une branche ou nom de tag), la commande <code>reset</code> va …</p>
<ol>
<li>Réécrire la branche courante jusqu’au point du commit spécifié</li>
<li>De manière optionnelle, réinitialiser la liste des fichiers en attente pour<br />
correspondre au commit spécifié</li>
<li>De manière optionnelle, réinitialiser le répertoire de travail pour<br />
correspondre au commit spécifié</li>
</ol>
<h2>Vérifions notre historique <em>02</em></h2>
<p>Faisons une petite vérification de de notre historique de commit.</p>
<h4>Execute:</h4>
<pre class="instructions">git hist</pre>
<h4>Output:</h4>
<pre class="sample">$ git hist
* 412434e 2014-02-21 | Revert "Oups, nous ne voulions pas ce commit" (HEAD, master) [Jim Weirich]
* 83f893e 2014-02-21 | Oups, nous ne voulions pas ce commit [Jim Weirich]
* a9c6007 2014-02-21 | Ajout d'un commentaire (v1) [Jim Weirich]
* 221243e 2014-02-21 | Ajouter une valeur par défaut (v1-beta) [Jim Weirich]
* 80fc666 2014-02-21 | Using ARGV [Jim Weirich]
* 834ca4f 2014-02-21 | Mon premier commit [Jim Weirich]</pre>
<p>Nous voyons que nous avons un commit “Oups” et un commit “Annuler Oups” comme deux derniers commits fait dans cette branche. Maintenant enlevons-les en utilisant reset.</p>
<h2>En premier, marquer cette branche <em>03</em></h2>
<p>mais avant d’enlever les commits, marquons le dernier commit avec un tag pour que nous puissions encore le retrouver.</p>
<h4>Execute:</h4>
<pre class="instructions">git tag oups</pre>
<h2>Réinitialiser à Avant Oups <em>04</em></h2>
<p>En regardant l’historique de log (au dessus), nous voyions que le commit taggé ‘v1’ est le commit juste avant le mauvais commit. Commençons par réinitialiser la branche à ce point. A présent que cette branche est taggé, nous pouvons utiliser le nom du tag dans la commande reset (si elle ne l’était pas, nous pourrions juste utiliser la valeur de hash).</p>
<h4>Execute:</h4>
<pre class="instructions">git reset --hard v1
git hist</pre>
<h4>Output:</h4>
<pre class="sample">$ git reset --hard v1
HEAD is now at a9c6007 Ajout d'un commentaire
$ git hist
* a9c6007 2014-02-21 | Ajout d'un commentaire (HEAD, v1, master) [Jim Weirich]
* 221243e 2014-02-21 | Ajouter une valeur par défaut (v1-beta) [Jim Weirich]
* 80fc666 2014-02-21 | Using ARGV [Jim Weirich]
* 834ca4f 2014-02-21 | Mon premier commit [Jim Weirich]</pre>
<p>Notre branche master branch pointe maintenant vers le commit v1 et le commit Oups et le commit Annuler Oups nes ont plus dans la branche. Le paramètre <code>--hard</code> indique que le répertoire de travail devrait être mis à jour pour être consistant avec le head de la nouvelle branche.</p>
<h2>Rien n’est jamais perdu <em>05</em></h2>
<p>Mais qu’est il arrivé aux mauvais commits? En fait les commits sont toujours dans le dépôt. D’ailleurs, nous pouvons toujours les référencer. Rappelez vous qu’au début de cette partie, nous avons taggé le commit d’annulation avec le tag “oups”. Regardons <em>tous</em> les commits.</p>
<h4>Execute:</h4>
<pre class="instructions">git hist --all</pre>
<h4>Output:</h4>
<pre class="sample">$ git hist --all
* 412434e 2014-02-21 | Revert "Oups, nous ne voulions pas ce commit" (oups) [Jim Weirich]
* 83f893e 2014-02-21 | Oups, nous ne voulions pas ce commit [Jim Weirich]
* a9c6007 2014-02-21 | Ajout d'un commentaire (HEAD, v1, master) [Jim Weirich]
* 221243e 2014-02-21 | Ajouter une valeur par défaut (v1-beta) [Jim Weirich]
* 80fc666 2014-02-21 | Using ARGV [Jim Weirich]
* 834ca4f 2014-02-21 | Mon premier commit [Jim Weirich]</pre>
<p>Ici nous voyons que les mauvais commits n’ont pas disparus. Ils sont toujours dans le dépôt. C’est juste qu’ils ne sont plus listés dans la branche master. Si nous ne les avions pas taggés, ils seraient toujours dans le dépôt, mais il n’y aurait plus moyen de les référencer autrement que par leur nom de hash. Les commits non référencés restent dans le dépôt jusqu’à ce que le système lance l’utilitaire de nettoyage mémoire.</p>
<h2>Les dangers du reset <em>06</em></h2>
<p>Les réinitialisations sur les branches locales sont généralement sûres. N’importe quel accident peut être généralement récupéré en faisant un reset avec le commit désiré.</p>
<p>Cependant, si la branche est partagée sur des répertoires distants, faire un reset peut gêner les autres utilisateurs de la branche.</p>
</div>
<div id="index">
<h1>Table des matières</h1>
<div id="show_bookmarks"></div>
<div id="no_bookmarks"></div>
<ul>
<li data-lab-id="0"><a href="index.html"><span> </span>Couverture de page d'accueil</a></li>
<li data-lab-id="1"><a href="lab_01.html"><span>1:</span> Configuration</a></li>
<li data-lab-id="2"><a href="lab_02.html"><span>2:</span> Configuration supplémentaire</a></li>
<li data-lab-id="3"><a href="lab_03.html"><span>3:</span> Créer un projet</a></li>
<li data-lab-id="4"><a href="lab_04.html"><span>4:</span> Vérifier le status</a></li>
<li data-lab-id="5"><a href="lab_05.html"><span>5:</span> Effectuer des changements</a></li>
<li data-lab-id="6"><a href="lab_06.html"><span>6:</span> Déclarer les changements</a></li>
<li data-lab-id="7"><a href="lab_07.html"><span>7:</span> Déclarer et commiter</a></li>
<li data-lab-id="8"><a href="lab_08.html"><span>8:</span> Commiter les changements</a></li>
<li data-lab-id="9"><a href="lab_09.html"><span>9:</span> Changements, pas fichiers</a></li>
<li data-lab-id="10"><a href="lab_10.html"><span>10:</span> Historique</a></li>
<li data-lab-id="11"><a href="lab_11.html"><span>11:</span> Alias</a></li>
<li data-lab-id="12"><a href="lab_12.html"><span>12:</span> Obtenir de vieille versions</a></li>
<li data-lab-id="13"><a href="lab_13.html"><span>13:</span> Tagger des versions</a></li>
<li data-lab-id="14"><a href="lab_14.html"><span>14:</span> Annuler les changements locaux (avant les déclarations)</a></li>
<li data-lab-id="15"><a href="lab_15.html"><span>15:</span> Annuler les déclarations de fichiers changés (avant de commiter)</a></li>
<li data-lab-id="16"><a href="lab_16.html"><span>16:</span> Annuler les changements déjà commités</a></li>
<li data-lab-id="17"><a href="lab_17.html"><span>17:</span> Enlever des commits d'une branche</a></li>
<li data-lab-id="18"><a href="lab_18.html"><span>18:</span> Enlever le tag oups</a></li>
<li data-lab-id="19"><a href="lab_19.html"><span>19:</span> Amender les commits</a></li>
<li data-lab-id="20"><a href="lab_20.html"><span>20:</span> Déplacer les fichiers</a></li>
<li data-lab-id="21"><a href="lab_21.html"><span>21:</span> Plus de structuration</a></li>
<li data-lab-id="22"><a href="lab_22.html"><span>22:</span> Fonctionnement interne de Git: le répertoire .git</a></li>
<li data-lab-id="23"><a href="lab_23.html"><span>23:</span> Fonctionnement interne de Git: travailler directement avec les objets Git</a></li>
<li data-lab-id="24"><a href="lab_24.html"><span>24:</span> Créer une branche</a></li>
<li data-lab-id="25"><a href="lab_25.html"><span>25:</span> Naviguer dans les branches</a></li>
<li data-lab-id="26"><a href="lab_26.html"><span>26:</span> Changements dans Master</a></li>
<li data-lab-id="27"><a href="lab_27.html"><span>27:</span> Visualiser les branches qui divergent</a></li>
<li data-lab-id="28"><a href="lab_28.html"><span>28:</span> Fusion</a></li>
<li data-lab-id="29"><a href="lab_29.html"><span>29:</span> Création d'un conflit</a></li>
<li data-lab-id="30"><a href="lab_30.html"><span>30:</span> Résolution des conflits</a></li>
<li data-lab-id="31"><a href="lab_31.html"><span>31:</span> Rebasing VS Merging</a></li>
<li data-lab-id="32"><a href="lab_32.html"><span>32:</span> Resetting the Greet Branch</a></li>
<li data-lab-id="33"><a href="lab_33.html"><span>33:</span> Resetting the Master Branch</a></li>
<li data-lab-id="34"><a href="lab_34.html"><span>34:</span> Rebasing</a></li>
<li data-lab-id="35"><a href="lab_35.html"><span>35:</span> Fusionner dans la branche master</a></li>
<li data-lab-id="36"><a href="lab_36.html"><span>36:</span> Dépôts multiples</a></li>
<li data-lab-id="37"><a href="lab_37.html"><span>37:</span> Cloner des dépôts</a></li>
<li data-lab-id="38"><a href="lab_38.html"><span>38:</span> Examiner le dépôt cloné</a></li>
<li data-lab-id="39"><a href="lab_39.html"><span>39:</span> Qu'est ce qu'origin?</a></li>
<li data-lab-id="40"><a href="lab_40.html"><span>40:</span> Branches distantes</a></li>
<li data-lab-id="41"><a href="lab_41.html"><span>41:</span> Changer le dépôt original</a></li>
<li data-lab-id="42"><a href="lab_42.html"><span>42:</span> Rapporter(fetch) les changements</a></li>
<li data-lab-id="43"><a href="lab_43.html"><span>43:</span> Fusionner les changements récupérés</a></li>
<li data-lab-id="44"><a href="lab_44.html"><span>44:</span> "Tirer" (pull) les changements</a></li>
<li data-lab-id="45"><a href="lab_45.html"><span>45:</span> Ajouter une branche pour le suivi</a></li>
<li data-lab-id="46"><a href="lab_46.html"><span>46:</span> Dépôts dit "nus" (bare)</a></li>
<li data-lab-id="47"><a href="lab_47.html"><span>47:</span> Ajouter un dépôt distant</a></li>
<li data-lab-id="48"><a href="lab_48.html"><span>48:</span> Envoyer un changement</a></li>
<li data-lab-id="49"><a href="lab_49.html"><span>49:</span> Récupérer les changements partagés</a></li>
<li data-lab-id="50"><a href="lab_50.html"><span>50:</span> Héberger vos dépôts Git</a></li>
<li data-lab-id="51"><a href="lab_51.html"><span>51:</span> Partager des dépôts</a></li>
<li data-lab-id="52"><a href="lab_52.html"><span>52:</span> Sujets avancés / futurs</a></li>
<li data-lab-id="53"><a href="lab_53.html"><span>53:</span> Merci</a></li>
</ul>
</div>
<footer id="footer">
<nav>
<ul>
<li class="arrow next">
<a href="lab_18.html#main_content">Suivant</a>
</li>
<li class="arrow previous">
<a href="lab_16.html#main_content">Précédent</a>
</li>
<li class="index_button"><a href="#">Index</a></li>
</ul>
</nav>
<a href="http://edgecase.com" target="_blank" id="edgecase_link_small">EdgeCase</a>
</footer>
</body>
</html>