\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]
\frametitle{Le merge}
Le \verb+merge+ applique les modifications apportées depuis la divergence par la branche secondaire sur la branche de départ.
TODO figure
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}
\end{frame}
\begin{frame}
\begin{frame}[fragile]
\frametitle{Le rebase}
\framesubtitle{Avertissement}
\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}
\end{frame}
\begin{frame}
\begin{frame}[fragile]
\frametitle{Le rebase}
\framesubtitle{Comparaison avec le merge}
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.