From 1ba45ccffb38c8e23b78a683dafb9eef254a3234 Mon Sep 17 00:00:00 2001 From: Philippe Dosch <Philippe.Dosch@loria.fr> Date: Thu, 6 Feb 2014 01:16:56 +0100 Subject: [PATCH] Finalizes the rebase part and introduces comparaison between merge and rebase --- branchmerge.tex | 86 +++++++++++++++++++++++++++++++++++++------------ 1 file changed, 66 insertions(+), 20 deletions(-) diff --git a/branchmerge.tex b/branchmerge.tex index 94371fe..82cecc7 100644 --- a/branchmerge.tex +++ b/branchmerge.tex @@ -93,7 +93,7 @@ %====================================================================== -\frame{\frametitle{Fonctionnement} +\frame{\frametitle{Principe de fonctionnement} \begin{itemize} \item Pour réaliser la fusion, Git repose, en interne, sur la @@ -122,23 +122,31 @@ \begin{itemize} \item Au lieu d'effectuer une fusion au moyen de la commande \ex{merge}, - il est possible d'obtenir un résultat similaire en réécrivant - l'historique au moyen de la commande \ex{rebase} + il est possible d'obtenir un résultat similaire en réécrivant (on + dit aussi \emph{en rejouant}) l'historique au moyen de la commande + \ex{rebase} \item Un des usages fait de cette commande est de garder une nouvelle branche synchronisée avec la branche dont elle est issue + \end{itemize} +} + +%====================================================================== + +\frame{\frametitle{Une alternative à la fusion} + \begin{itemize} + \item + Pour assurer cette synchronisation \begin{itemize} \item - la commande \ex{rebase} est alors appliqué régulièrement pour - que la nouvelle branche « profite » aussi des \emph{commits} - réalisés dans la branche de départ + la commande \ex{rebase} est doit être appliquée régulièrement + pour que la nouvelle branche « profite » aussi des + \emph{commits} réalisés dans la branche de départ \item la fusion finale est généralement facilitée, la synchronisation régulière permettant de régler les éventuels conflits au fur et à mesure \end{itemize} - % L'insertion de figures telles que celles présentées pages 165-166 - % du bouquin O'Reilly doit permettre de mieux comprendre cet aspect \end{itemize} } @@ -147,14 +155,20 @@ \frame{\frametitle{Principe de fonctionnement} \begin{itemize} \item - La commande \ex{rebase} réécrit chacun des commits à considérer - pour qu'ils s'appliquent au contexte de la branche sur laquelle - ils sont portés - \item - Incidemment, la commande \ex{rebase} est souvent présentée comme - une commande de \emph{réécriture} + La commande \ex{rebase} + \begin{enumerate} + \item + cherche l'ancêtre commun aux deux branches considérées~: ce sera + le premier \emph{commit} à réécrire + \item + réécrit chacun des commits de la nouvelle branche pour qu'ils ne + soient plus relatifs à l'ancêtre commun mais au dernier commit + de la branche de départ + \end{enumerate} \item - + Au final, la nouvelle branche intègre aussi bien les + \emph{commits} qui lui sont spécifiques que ceux ajoutés à la + branche de départ \end{itemize} } @@ -179,13 +193,45 @@ %====================================================================== -\frame{\frametitle{\texttt{rebase} \emph{vs} \texttt{merge}} +\subsection{Comparaison de \texttt{merge} et de \texttt{rebase}} + +%====================================================================== + +\frame{\frametitle{\texttt{merge} \emph{vs} \texttt{rebase}} \begin{itemize} + \item + Remarques + \begin{itemize} + \item + après un \ex{merge}, c'est la branche de départ qui contient + l'intégralité des \emph{commits} réalisés (branche de base + + nouvelle fonctionnalité) + \item + après un \ex{rebase}, c'est la nouvelle branche qui contient + l'intégralité des \emph{commits} réalisés + \end{itemize} \item - Le résultat obtenu avec un \ex{rebase} est relativement similaire - à celui obtenu avec un \ex{merge} : dans les deux cas, la branche - destination intègre tous les apports des \emph{commits} des deux - branches considérées + On peut se demander quelle commande il est préférable d'utiliser + en général ou si certains contextes conditionnent plutôt l'usage + de l'une ou de l'autre des commandes + \end{itemize} +} + +%====================================================================== + +\frame{\frametitle{\texttt{rebase} \emph{vs} \texttt{merge}} + \begin{itemize} + \item + Remarques + \begin{itemize} + \item + après un \ex{merge}, c'est la branche de départ qui contient + l'intégralité des \emph{commits} réalisés (branche de base + + nouvelle fonctionnalité) + \item + après un \ex{rebase}, c'est la nouvelle branche qui contient + l'intégralité des \emph{commits} réalisés + \end{itemize} \item On peut donc se demander s'il est préférable d'utiliser l'une ou l'autre des commandes ou si certains environnements conditionnent -- GitLab