fusionner_branches.tex 5.7 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
162
163
164
165
166
167
168
169
\end{frame}

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

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