section manipuler les branches
parent
d24ba94fdb
commit
e8378bce01
@ -1,6 +1,191 @@
|
||||
== Travailler avec les branches
|
||||
|
||||
=== Créer une branche
|
||||
=== !
|
||||
|
||||
[.step]
|
||||
* On veut relire no
|
||||
On veut relire notre rapport, création d'une branche `relecture` :
|
||||
|
||||
[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