fusionner_branches.tex 10.6 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
\begin{frame}[fragile]{Fusionner deux branches avec Git}
	\textit{Attention : avant de commencer, s'assurer que le répertoire est dans un état propre et qu'il n'y a pas de modifications non validées !}

	\medskip

	Git propose deux façons de fusionner deux branches :
	\begin{itemize}
		\item le \verb+merge+ : fusion \enquote{basique} de deux branches \\
			\textbf{C'est l'alternative la plus simple}
		\item le \verb+rebase+ : modification plus avancée de l'historique \\
			\textbf{Plus puissant mais plus dangereux}
	\end{itemize}
\end{frame}

\begin{frame}[fragile]
Rémy Huet's avatar
Rémy Huet committed
16
	\frametitle{Le merge}
17 18 19

	Le \verb+merge+ applique les modifications apportées depuis la divergence par la branche secondaire sur la branche de départ.

Rémy Huet's avatar
Rémy Huet committed
20 21 22 23
	\begin{figure}[h]
		\centering
		\input{src/tikz/merge.tex}
	\end{figure}
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38

	Ici, C7 réalise le \verb+merge+ de la branche bleue dans la branche verte : les modifications apportées par C4 et C6 sont appliquées après C5.

	\medskip

	\Pause

	\begin{block}{Processus de fusion}
		\begin{enumerate}
			\item se déplacer sur la branche destination de la fusion \\
			\verb+git checkout <destination>+
			\item lancer la fusion de la branche de travail \\
			\verb+git merge <branche de travail>+
		\end{enumerate}
	\end{block}
Rémy Huet's avatar
Rémy Huet committed
39 40
\end{frame}

Rémy Huet's avatar
Rémy Huet committed
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
\begin{frame}[fragile]
	\frametitle{Le merge}
	\framesubtitle{Application}
	\begin{beamercolorbox}[rounded=true, shadow=true]{terminal}
		\begin{Verbatim}
$ echo nouvelle ligne >> API.txt && git commit -am "Commit sur master" \Pause
[master 37d2273] Commit sur master
 1 file changed, 1 insertion(+) \Pause

$ git merge develop \Pause
Merge made by the 'recursive' strategy.
 dev.txt | 0
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 dev.txt \Pause
		\end{Verbatim}
	\end{beamercolorbox}
\end{frame}

\begin{frame}[fragile]
	\frametitle{Le merge}
	\framesubtitle{Log !}
	\begin{beamercolorbox}[rounded=true, shadow=true]{terminal}
		\begin{Verbatim}
$ git log --graph --decorate \Pause

*   \textcolor{yellow}{commit 1892470146ed37358a45e8e5cd9715ec0fc3448a (}{\bf\textcolor{cyan}{HEAD -> }\textcolor{green}{master}}\textcolor{yellow}{)}
\textcolor{red}{|}\textcolor{myGreen}{|}  Merge: 37d2273 2292018
\textcolor{red}{|} \textcolor{myGreen}{|} Author: huetremy <remy.huet@etu.utc.fr>
\textcolor{red}{|} \textcolor{myGreen}{|} Date:   Mon Jan 14 14:50:00 2019 +0100
\textcolor{red}{|} \textcolor{myGreen}{|}
\textcolor{red}{|} \textcolor{myGreen}{|}     Merge branch 'develop'
\textcolor{red}{|} \textcolor{myGreen}{|}
\textcolor{red}{|} * \textcolor{yellow}{commit 2292018a27182fef507601140c7f93d679b93678 (}{\bf\textcolor{green}{develop}}\textcolor{yellow}{)}
\textcolor{red}{|} \textcolor{myGreen}{|} Author: huetremy <remy.huet@etu.utc.fr>
\textcolor{red}{|} \textcolor{myGreen}{|} Date:   Mon Jan 14 14:01:37 2019 +0100
\textcolor{red}{|} \textcolor{myGreen}{|}
\textcolor{red}{|} \textcolor{myGreen}{|}     Ajout fichier dev
\textcolor{red}{|} \textcolor{myGreen}{|}
* \textcolor{myGreen}{|} \textcolor{yellow}{commit 37d2273def21ff6d8bb33f0600220764f67f2ab9}
\textcolor{myGreen}{|}\textcolor{myGreen}{/}  Author: huetremy <remy.huet@etu.utc.fr>
\textcolor{myGreen}{|}   Date:   Mon Jan 14 14:49:12 2019 +0100
\textcolor{myGreen}{|}
\textcolor{myGreen}{|}       Commit sur master
\textcolor{myGreen}{|}
* \textcolor{yellow}{commit 168efba77dcfd59ba4346fe4a34427b71db75da7}
\textcolor{myGreen}{|} Author: huetremy <remy.huet@etu.utc.fr>
\textcolor{myGreen}{|} Date:   Fri Jan 11 14:53:09 2019 +0100
\textcolor{myGreen}{|}
\textcolor{myGreen}{|}     Commit supplémentaire
		\end{Verbatim}
	\end{beamercolorbox}
\end{frame}

94
\begin{frame}[fragile]
Rémy Huet's avatar
Rémy Huet committed
95 96
	\frametitle{Le rebase}
	\framesubtitle{Avertissement}
97 98 99 100 101 102 103 104 105 106 107 108 109 110 111

	\begin{center}
		\includegraphics[height=3em]{./imgs/warning.jpg}

		\textbf{ATTENTION -- COMMANDE RISQUÉE}
	\end{center}

	Le \verb+rebase+ cause une \textbf{modification de l'historique} qui peut rendre l'état de votre arbre incohérent avec une éventuelle branche distante (GitLab...).

	\bigskip

	\begin{block}{Conclusion}
		On rebase une branche locale mais \textbf{JAMAIS} une branche synchronisée \\
		\tiny{(sauf si vous êtes absolument sûrs de ce que vous faites)}.
	\end{block}
Rémy Huet's avatar
Rémy Huet committed
112 113
\end{frame}

114
\begin{frame}[fragile]
Rémy Huet's avatar
Rémy Huet committed
115 116
	\frametitle{Le rebase}
	\framesubtitle{Comparaison avec le merge}
117 118 119 120 121 122 123 124 125

	Le \verb+rebase+ intègre aussi les modifications d'une branche secondaire sur la branche cible depuis la divergence mais ne crée pas de commit de merge.

	\medskip

	Les commits effectués depuis la divergence sont \textbf{déplacés et réappliqués} après le dernier commit de la branche cible.

	\Pause

Rémy Huet's avatar
Rémy Huet committed
126 127 128 129 130 131
	\begin{figure}[h]
		\centering
		\input{src/tikz/avant_rebase.tex}
		\caption{Avant le rebase}
		\label{fig:avant_rebase}
	\end{figure}
132

Rémy Huet's avatar
Rémy Huet committed
133 134 135 136 137 138
	\begin{figure}[h]
		\centering
		\input{src/tikz/apres_rebase.tex}
		\caption{Après le rebase}
		\label{fig:apres_rebase}
	\end{figure}
Rémy Huet's avatar
Rémy Huet committed
139 140
\end{frame}

141
\begin{frame}[fragile]
Rémy Huet's avatar
Rémy Huet committed
142 143
	\frametitle{Le rebase}
	\framesubtitle{Application simple}
144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159

	Après le rebase, pour ramener la branche de référence au bout de la chaîne de commits, on fait une fusion classique (merge).

	\begin{block}{Processus de rebase avec fusion}
		\begin{itemize}
			\item se déplacer sur la branche à rebase \\
				\verb+git checkout <branche à rebase>+
			\item rebase la branche courante sur la branche de référence \\
				\verb+git rebase <branche de référence>+
			\item régler les éventuels conflits...
			\item se déplacer sur la branche de référence \\
				\verb+git checkout <branche de référence>+
			\item fusionner la branche à rebase dans la branche de référence \\
				\verb+git merge <branche à rebase>+
		\end{itemize}
	\end{block}
Rémy Huet's avatar
Rémy Huet committed
160 161
\end{frame}

Rémy Huet's avatar
Rémy Huet committed
162 163 164 165 166 167 168 169 170 171 172 173 174 175
\begin{frame}[fragile]
	\frametitle{Le rebase}
	\framesubtitle{Exemple}
	\begin{beamercolorbox}[rounded=true,shadow=true]{terminal}
		\begin{Verbatim}
$ echo "Avant rebase" >> API.txt && gitc -am "Avant rebase" \Pause
[master 6fe645e] Avant rebase
 1 file changed, 1 insertion(+) \Pause

$ git checkout develop && echo ''Ma première ligne'' >> dev.txt && gitc -am ''ajout à dev'' \Pause
Basculement sur la branche 'develop'
Votre branche est à jour avec 'origin/develop'.
[develop 59eed37] ajout à dev
 1 file changed, 1 insertion(+) \Pause
Rémy Huet's avatar
Rémy Huet committed
176
$ git log --graph --decorate --all
Rémy Huet's avatar
Rémy Huet committed
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 213 214 215 216 217 218 219 220
		\end{Verbatim}
	\end{beamercolorbox}
\end{frame}

\begin{frame}[fragile]
	\begin{beamercolorbox}[rounded=true, shadow=true]{terminal}
		\begin{Verbatim}
* \textcolor{yellow}{commit 59eed37beb51329f95e90e6d6a6de85ca36c441a (}{\bf\textcolor{cyan}{HEAD -> }\textcolor{green}{develop}}\textcolor{yellow}{)}
\textcolor{red}{|} Author: huetremy <remy.huet@etu.utc.fr>
\textcolor{red}{|} Date:   Mon Jan 14 15:33:59 2019 +0100
\textcolor{red}{|}
\textcolor{red}{|}     ajout à dev
\textcolor{red}{|}
\textcolor{red}{|} * \textcolor{yellow}{commit 6fe645e97ba1a69c99438fba05f21902d19f1055 (}{\bf\textcolor{green}{master}}\textcolor{yellow}{)}
\textcolor{red}{|} \textcolor{myGreen}{|} Author: huetremy <remy.huet@etu.utc.fr>
\textcolor{red}{|} \textcolor{myGreen}{|} Date:   Mon Jan 14 15:31:47 2019 +0100
\textcolor{red}{|} \textcolor{myGreen}{|}
\textcolor{red}{|} \textcolor{myGreen}{|}     Avant rebase
\textcolor{red}{|} \textcolor{myGreen}{|}
\textcolor{red}{|} *   \textcolor{yellow}{commit 1892470146ed37358a45e8e5cd9715ec0fc3448a}
\textcolor{red}{|} \textcolor{yellow}{|}\textcolor{red}{|}  Merge: 37d2273 2292018
\textcolor{red}{|} \textcolor{yellow}{|}\textcolor{red}{/}  Author: huetremy <remy.huet@etu.utc.fr>
\textcolor{red}{|}\textcolor{red}{/}\textcolor{yellow}{|}   Date:   Mon Jan 14 14:50:00 2019 +0100
\textcolor{red}{|} \textcolor{yellow}{|}
\textcolor{red}{|} \textcolor{yellow}{|}       Merge branch 'develop'
\textcolor{red}{|} \textcolor{yellow}{|}
* \textcolor{yellow}{|} \textcolor{yellow}{commit 2292018a27182fef507601140c7f93d679b93678}
\textcolor{cyan}{|} \textcolor{yellow}{|} Author: huetremy <remy.huet@etu.utc.fr>
\textcolor{cyan}{|} \textcolor{yellow}{|} Date:   Mon Jan 14 14:01:37 2019 +0100
\textcolor{cyan}{|} \textcolor{yellow}{|}
\textcolor{cyan}{|} \textcolor{yellow}{|}     Ajout fichier dev
\textcolor{cyan}{|} \textcolor{yellow}{|}
\textcolor{cyan}{|} * \textcolor{yellow}{commit 37d2273def21ff6d8bb33f0600220764f67f2ab9}
\textcolor{cyan}{|}\textcolor{cyan}{/}  Author: huetremy <remy.huet@etu.utc.fr>
\textcolor{cyan}{|}   Date:   Mon Jan 14 14:49:12 2019 +0100
\textcolor{cyan}{|}
\textcolor{cyan}{|}       Commit sur master
\textcolor{cyan}{|}
* \textcolor{yellow}{commit 168efba77dcfd59ba4346fe4a34427b71db75da7}
[\ldots]
		\end{Verbatim}
	\end{beamercolorbox}
\end{frame}

Rémy Huet's avatar
Rémy Huet committed
221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260
\begin{frame}[fragile]
	\begin{beamercolorbox}[rounded=true, shadow=true]{terminal}
		\begin{Verbatim}
$ git rebase master \Pause
Rembobinage préalable de head pour pouvoir rejouer votre travail par-dessus...
Application de  ajout à dev \Pause
$ git log --graph --decorate \Pause
* \textcolor{yellow}{commit 1b9926f89453896c3f11e1f75b6871d70f35c5a4 (}{\bf\textcolor{cyan}{HEAD -> }\textcolor{green}{develop}}\textcolor{yellow}{)}
\textcolor{red}{|} Author: huetremy <remy.huet@etu.utc.fr>
\textcolor{red}{|} Date:   Mon Jan 14 15:33:59 2019 +0100
\textcolor{red}{|}
\textcolor{red}{|}     ajout à dev
\textcolor{red}{|}
* \textcolor{yellow}{commit 6fe645e97ba1a69c99438fba05f21902d19f1055 (}{\bf\textcolor{green}{master}}\textcolor{yellow}{)}
\textcolor{red}{|} Author: huetremy <remy.huet@etu.utc.fr>
\textcolor{red}{|} Date:   Mon Jan 14 15:31:47 2019 +0100
\textcolor{red}{|}
\textcolor{red}{|}     Avant rebase
\textcolor{red}{|}
*   \textcolor{yellow}{commit 1892470146ed37358a45e8e5cd9715ec0fc3448a}
\textcolor{myGreen}{|}\textcolor{yellow}{|}  Merge: 37d2273 2292018
\textcolor{myGreen}{|} \textcolor{yellow}{|} Author: huetremy <remy.huet@etu.utc.fr>
\textcolor{myGreen}{|} \textcolor{yellow}{|} Date:   Mon Jan 14 14:50:00 2019 +0100
\textcolor{myGreen}{|} \textcolor{yellow}{|}
\textcolor{myGreen}{|} \textcolor{yellow}{|}     Merge branch 'develop'
\textcolor{myGreen}{|} \textcolor{yellow}{|}
\textcolor{myGreen}{|} * \textcolor{yellow}{commit 2292018a27182fef507601140c7f93d679b93678}
\textcolor{myGreen}{|} \textcolor{yellow}{|} Author: huetremy <remy.huet@etu.utc.fr>
\textcolor{myGreen}{|} \textcolor{yellow}{|} Date:   Mon Jan 14 14:01:37 2019 +0100
\textcolor{myGreen}{|} \textcolor{yellow}{|}
\textcolor{myGreen}{|} \textcolor{yellow}{|}     Ajout fichier dev
\textcolor{myGreen}{|} \textcolor{yellow}{|}
* \textcolor{yellow}{|} commit 37d2273def21ff6d8bb33f0600220764f67f2ab9
\textcolor{yellow}{|}\textcolor{yellow}{/}  Author: huetremy <remy.huet@etu.utc.fr>
\textcolor{yellow}{|}   Date:   Mon Jan 14 14:49:12 2019 +0100
[\ldots]
		\end{Verbatim}
	\end{beamercolorbox}
\end{frame}

Rémy Huet's avatar
Rémy Huet committed
261 262 263 264 265 266 267 268
\begin{frame}
	\frametitle{Le rebase}
	\framesubtitle{Rebase interactif}
\end{frame}

\begin{frame}
	\frametitle{Le cherry-pick}
\end{frame}