section manipuler les branches
parent
d24ba94fdb
commit
e8378bce01
@ -1,6 +1,191 @@
|
|||||||
== Travailler avec les branches
|
== Travailler avec les branches
|
||||||
|
|
||||||
=== Créer une branche
|
=== !
|
||||||
|
|
||||||
[.step]
|
On veut relire notre rapport, création d'une branche `relecture` :
|
||||||
* On veut relire no
|
|
||||||
|
[source,shell]
|
||||||
|
----
|
||||||
|
$ git checkout -b relecture
|
||||||
|
----
|
||||||
|
|
||||||
|
On corrige notre rapport :
|
||||||
|
|
||||||
|
[source,shell]
|
||||||
|
----
|
||||||
|
$ echo "Salut tout le monde !" > rapport.md
|
||||||
|
$ git add rapport.md
|
||||||
|
$ git commit -m "plus d'enthousiasme"
|
||||||
|
----
|
||||||
|
|
||||||
|
=== !
|
||||||
|
|
||||||
|
Entre temps, le travail continue sur `master` :
|
||||||
|
|
||||||
|
[source,shell]
|
||||||
|
----
|
||||||
|
$ echo "Projet ayant pour but de tester Git" > readme.md
|
||||||
|
$ git add readme.md
|
||||||
|
$ git commit -m "ajout readme"
|
||||||
|
----
|
||||||
|
|
||||||
|
L'état du projet :
|
||||||
|
|
||||||
|
[source,shell]
|
||||||
|
----
|
||||||
|
$ git log --graph --decorate --oneline --all
|
||||||
|
* 0428e9b (HEAD -> master) ajout readme
|
||||||
|
| * 188be3e (relecture) plus d'enthousiasme
|
||||||
|
|/
|
||||||
|
* 8b3e823 greeetings
|
||||||
|
* b4c8004 commit initial
|
||||||
|
----
|
||||||
|
|
||||||
|
=== Apparté : les alias
|
||||||
|
|
||||||
|
La commande précédente est longue à taper, mais néanmoins très utile.
|
||||||
|
On va utiliser un alias git pour se simplifier la vie :
|
||||||
|
|
||||||
|
[source,shell]
|
||||||
|
----
|
||||||
|
$ git config --global alias.lola "log --graph --decorate --oneline --all"
|
||||||
|
----
|
||||||
|
|
||||||
|
On a plus besoin que de taper `git lola` pour obtenir le même résultat !
|
||||||
|
|
||||||
|
== Réintégrer le travail de relecture
|
||||||
|
|
||||||
|
Il y a deux façons principales de réintégrer le travail de notre branche `relecture` dans `master` :
|
||||||
|
|
||||||
|
* Un merge d'une branche dans l'autre
|
||||||
|
* Un rebase d'une branche par-dessus l'autre
|
||||||
|
|
||||||
|
=== Merge
|
||||||
|
|
||||||
|
On repart du graphe précédent :
|
||||||
|
|
||||||
|
[graphviz,merge-before,svg]
|
||||||
|
----
|
||||||
|
digraph g {
|
||||||
|
rankdir = LR
|
||||||
|
node[group=master];
|
||||||
|
1 -> 2 -> 3 -> 4 -> 7
|
||||||
|
node[group=branch];
|
||||||
|
2 -> 5 -> 6
|
||||||
|
node[group=refs shape=note style=filled fillcolor=yellow];
|
||||||
|
edge[arrowhead = none style=dotted]
|
||||||
|
7 -> master
|
||||||
|
6 -> relecture
|
||||||
|
master -> HEAD
|
||||||
|
}
|
||||||
|
----
|
||||||
|
|
||||||
|
Faire un merge de `relecture` dans `master`, c'est deux étapes :
|
||||||
|
|
||||||
|
=== !
|
||||||
|
|
||||||
|
1 : Créer un commit ayant pour parents les derniers commits de chaque branche, donc 6 et 7
|
||||||
|
|
||||||
|
[graphviz,merge-1,svg]
|
||||||
|
----
|
||||||
|
digraph g {
|
||||||
|
rankdir = LR
|
||||||
|
node[group=master];
|
||||||
|
1 -> 2 -> 3 -> 4 -> 7 -> 8
|
||||||
|
6 -> 8
|
||||||
|
node[group=branch];
|
||||||
|
2 -> 5 -> 6
|
||||||
|
node[group=refs shape=note style=filled fillcolor=yellow];
|
||||||
|
edge[arrowhead = none style=dotted]
|
||||||
|
7 -> master
|
||||||
|
6 -> relecture
|
||||||
|
master -> HEAD
|
||||||
|
}
|
||||||
|
----
|
||||||
|
|
||||||
|
=== !
|
||||||
|
|
||||||
|
2 : Déplacer la référence de la branche *dans laquelle* on merge, ici `master`, sur le nouveau commit
|
||||||
|
|
||||||
|
[graphviz,merge-2,svg]
|
||||||
|
----
|
||||||
|
digraph g {
|
||||||
|
rankdir = LR
|
||||||
|
node[group=master];
|
||||||
|
1 -> 2 -> 3 -> 4 -> 7 -> 8
|
||||||
|
6 -> 8
|
||||||
|
node[group=branch];
|
||||||
|
2 -> 5 -> 6
|
||||||
|
node[group=refs shape=note style=filled fillcolor=yellow];
|
||||||
|
edge[arrowhead = none style=dotted]
|
||||||
|
8 -> master
|
||||||
|
6 -> relecture
|
||||||
|
master -> HEAD
|
||||||
|
}
|
||||||
|
----
|
||||||
|
|
||||||
|
=== Rebase
|
||||||
|
|
||||||
|
Toujours le même graphe de départ :
|
||||||
|
|
||||||
|
[graphviz,rebase-before,svg]
|
||||||
|
----
|
||||||
|
digraph g {
|
||||||
|
rankdir = LR
|
||||||
|
node[group=master];
|
||||||
|
1 -> 2 -> 3 -> 4 -> 7
|
||||||
|
node[group=branch];
|
||||||
|
2 -> 5 -> 6
|
||||||
|
node[group=refs shape=note style=filled fillcolor=yellow];
|
||||||
|
edge[arrowhead = none style=dotted]
|
||||||
|
7 -> master
|
||||||
|
6 -> relecture
|
||||||
|
master -> HEAD
|
||||||
|
}
|
||||||
|
----
|
||||||
|
|
||||||
|
Faire un rebase de `relecture` par-dessus `master`, c'est deux étapes :
|
||||||
|
|
||||||
|
=== !
|
||||||
|
|
||||||
|
1 : Trouver le commit à partir duquel les branches ont divergé, ici 5
|
||||||
|
|
||||||
|
[graphviz,rebase-1,svg]
|
||||||
|
----
|
||||||
|
digraph g {
|
||||||
|
rankdir = LR
|
||||||
|
node[group=master];
|
||||||
|
1 -> 2 -> 3 -> 4 -> 7
|
||||||
|
node[group=branch];
|
||||||
|
5 [style=filled]
|
||||||
|
2 -> 5 -> 6
|
||||||
|
node[group=refs shape=note style=filled fillcolor=yellow];
|
||||||
|
edge[arrowhead = none style=dotted]
|
||||||
|
7 -> master
|
||||||
|
6 -> relecture
|
||||||
|
relecture -> HEAD
|
||||||
|
}
|
||||||
|
----
|
||||||
|
|
||||||
|
=== !
|
||||||
|
|
||||||
|
2 : Rejouer les commits entre le 5 et celui pointé par `relecture`, ici 6, par-dessus de `master`
|
||||||
|
|
||||||
|
[graphviz,rebase-2,svg]
|
||||||
|
----
|
||||||
|
digraph g {
|
||||||
|
rankdir = LR
|
||||||
|
node[group=master];
|
||||||
|
1 -> 2 -> 3 -> 4 -> 7
|
||||||
|
node[group=branch];
|
||||||
|
5 [style=filled]
|
||||||
|
7 -> 5 -> 6
|
||||||
|
node[group=refs shape=note style=filled fillcolor=yellow];
|
||||||
|
edge[arrowhead = none style=dotted]
|
||||||
|
7 -> master
|
||||||
|
6 -> relecture
|
||||||
|
relecture -> HEAD
|
||||||
|
}
|
||||||
|
----
|
||||||
|
|
||||||
|
À noter : les commits ayant changé de parents, ils n'ont plus les mêmes hash, ce sont des commits *différents* !
|
||||||
|
Loading…
Reference in New Issue