fusionner_branches.tex 3.47 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}

41
\begin{frame}[fragile]
Rémy Huet's avatar
Rémy Huet committed
42 43
	\frametitle{Le rebase}
	\framesubtitle{Avertissement}
44 45 46 47 48 49 50 51 52 53 54 55 56 57 58

	\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
59 60
\end{frame}

61
\begin{frame}[fragile]
Rémy Huet's avatar
Rémy Huet committed
62 63
	\frametitle{Le rebase}
	\framesubtitle{Comparaison avec le merge}
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

	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}
Rémy Huet's avatar
Rémy Huet committed
94 95
\end{frame}

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

	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
115 116 117 118 119 120 121 122 123 124
\end{frame}

\begin{frame}
	\frametitle{Le rebase}
	\framesubtitle{Rebase interactif}
\end{frame}

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