diff --git a/imgs/warning.jpg b/imgs/warning.jpg new file mode 100644 index 0000000000000000000000000000000000000000..76a5562a9995755e60b4ac10967c831da839b0b2 Binary files /dev/null and b/imgs/warning.jpg differ diff --git a/src/tex/gestion_non_lineaire/fusionner_branches.tex b/src/tex/gestion_non_lineaire/fusionner_branches.tex index a5461e8ba8ea3a3b330a2019af25127335cbd312..bc6be3e4cf66ebdd5db3af15b0bf4ae056d95f64 100644 --- a/src/tex/gestion_non_lineaire/fusionner_branches.tex +++ b/src/tex/gestion_non_lineaire/fusionner_branches.tex @@ -1,20 +1,114 @@ -\begin{frame} +\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 + + \item lancer la fusion de la branche de travail \\ + \verb+git merge + + \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. + + \Pause + + \medskip + + Concrètement : + + \bigskip + + TODO figures + + \begin{center} + %\includegraphics[height=3em]{imgs/conflit.png} + + Merge de la branche bleue dans la branche verte + \end{center} + + \medskip + + \begin{center} + %\includegraphics[height=4em]{imgs/rebase_exemple.png} + + Rebase de la branche bleue sur la branche verte + \end{center} \end{frame} -\begin{frame} +\begin{frame}[fragile] \frametitle{Le rebase} \framesubtitle{Application simple} + + 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 + + \item rebase la branche courante sur la branche de référence \\ + \verb+git rebase + + \item régler les éventuels conflits... + \item se déplacer sur la branche de référence \\ + \verb+git checkout + + \item fusionner la branche à rebase dans la branche de référence \\ + \verb+git merge + + \end{itemize} + \end{block} \end{frame} \begin{frame}