« Git/Branches » : différence entre les versions

Contenu supprimé Contenu ajouté
→‎Effacer une branche : Correction d'une négation
DannyS712 (discussion | contributions)
m <source> -> <syntaxhighlight> (phab:T237267)
Ligne 11 :
Reprenons notre dépôt d'exemple :
 
<sourcesyntaxhighlight lang="bash">
git clone https://gerrit.wikimedia.org/r/p/test/mediawiki/extensions/examples.git
cd examples
</syntaxhighlight>
</source>
 
=== Créer une première branche ===
Ligne 20 :
D'abord, demandons à git de nous indiquer où nous en sommes au niveau des branches :
 
<sourcesyntaxhighlight lang="bash">
git branch
</syntaxhighlight>
</source>
<pre>
* master
Ligne 31 :
Créons une nouvelle branche que nous allons appeler <code>ma-branche</code>.
 
<sourcesyntaxhighlight lang="bash">
git branch ma-branche
</syntaxhighlight>
</source>
 
Constatons les effets :
 
<sourcesyntaxhighlight lang="bash">
git branch ma-branche
</syntaxhighlight>
</source>
<pre>
ma-branche
Ligne 47 :
Il y a maintenant deux branches : *master* et *ma-branche*. Actuellement, nous travaillons toujours sur *master* comme l'indique toujours l'astérisque.
 
<sourcesyntaxhighlight lang="bash">
git log --decorate --graph
</syntaxhighlight>
</source>
 
On peut voir, sur la première ligne que *master* et *ma-branche* sont au même niveau, sur le même commit. Nous allons maintenant demander à git de nous basculer sur *ma-branche* afin de pouvoir travailler sur celle-ci et non sur *master*.
 
<sourcesyntaxhighlight lang="bash">
git checkout ma-branche
</syntaxhighlight>
</source>
<pre>
Switched to branch 'ma-branche'
Ligne 62 :
On a basculé, et <code>git branch</code> nous le confirme.
 
<sourcesyntaxhighlight lang="bash">
git branch
</syntaxhighlight>
</source>
<pre>
* ma-branche
Ligne 78 :
Faisons les même modifications que précédemment :
 
<sourcesyntaxhighlight lang="bash">
echo "Ceci est un test de git" > mon_nouveau_fichier.txt
git add mon_nouveau_fichier.txt
Ligne 88 :
git add mon_nouveau_fichier.txt
git commit -m "ajout d'une troisième ligne dans le fichier"
</syntaxhighlight>
</source>
 
Et ainsi de suite. Vous pouvez commiter et faire autant de commits que vous voulez dans '''ma-branche'''.
Ligne 96 :
Regardons le <code>log</code> que cela produit :
 
<sourcesyntaxhighlight lang="bash">
git log --decorate --graph
</syntaxhighlight>
</source>
<pre>
* commit 635ace69f901dfb1aaff187e6abc54b0c95fe51e (HEAD, ma-branche)
Ligne 135 :
D'abord, se placer sur master :
 
<sourcesyntaxhighlight lang="bash">
git checkout master
</syntaxhighlight>
</source>
<pre>
Switched to branch 'master'
Ligne 144 :
Puis demander à git de fusionner la branche '''ma-branche''', sans {{lang|en|fast forward}}<ref>http://stackoverflow.com/questions/9069061/what-is-the-difference-between-git-merge-and-git-merge-no-ff</ref> pour éviter de perdre la topologie de la branche :
 
<sourcesyntaxhighlight lang="bash">
git merge ma-branche --no-ff -m "intégration de ma nouvelle fonctionnalité dans master"
</syntaxhighlight>
</source>
 
Git va faire un commit pour intégrer les changements. Comme précédemment, nous avons choisi d'utiliser <code>-m</code> pour préciser le message de commit mais on aurait pu ne rien mettre et git nous aurait ouvert l'éditeur de texte.
Ligne 159 :
Examinons
 
<sourcesyntaxhighlight lang="bash">
git log --decorate --graph
</syntaxhighlight>
</source>
<pre>
* commit abd3ef0a5978b90db042bf076e82d64c3576194b (HEAD, master)
Ligne 197 :
Nos changements sont intégrés à master, la branche est désormais inutile. Supprimons-la :
 
<sourcesyntaxhighlight lang="bash">
git branch -d ma-branche
</syntaxhighlight>
</source>
<pre>
Deleted branch ma-branche (was 635ace6).
Ligne 207 :
La suppression de la branche peut échouer si la branche à supprimer n'a pas été fusionnée dans ''master'' :
 
<sourcesyntaxhighlight lang="bash">
git branch -d ma-branche
</syntaxhighlight>
</source>
<pre>
error: The branch 'ma-branche' is not a strict subset of your current HEAD.
Ligne 217 :
Git se prémunit donc d'effacer des changements potentiellement non vérifiés. Comme git l'indique, on peut forcer la suppression malgré tout :
 
<sourcesyntaxhighlight lang="bash">
git branch -D ma-branche
</syntaxhighlight>
</source>
}}
 
Ligne 226 :
==== Supprimer les veilles branches ====
Lorsque l'on tape "git branch" après un certain temps, la branche active apparait au milieu d'une multitude d'anciennes branches généralement fusionnées, et donc inutile de conserver en local. Pour les nettoyer on utilise donc :
<sourcesyntaxhighlight lang="bash">
git remote prune origin
</syntaxhighlight>
</source>
 
Mais parfois il reste encore un paquet de branches locales qui ont été mergées sur le serveur. Pour éviter d'avoir à les supprimer une par une :
Ligne 243 :
== Renommer une branche ==
Il faut renommer la locale, supprimer la distante, puis pusher la locale :
<sourcesyntaxhighlight lang=bash>
git branch -m vieille_branche nouvelle_branche
git push origin :vieille_branche
git push --set-upstream origin nouvelle_branche
</syntaxhighlight>
</source>
 
L'option <code>--set-upstream</code> (alias <code>-u</code>) s'utilise uniquement à la création de la branche sur le serveur distant. Elle doit ensuite être mise à jour avec <code>push</code> tout court.