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...).
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\ldots).
Cet outil puissant permet de ré-écrire comme bon vous semble votre historique \textbf{local}.
\medskip
{\tiny On ne le répètera jamais assez : \textbf{n'utilisez jamais cette commande sur des commits déjà poussés, sauf si vous savez exactement ce que vous faites et connaissez les conséquences.}\par}
\Pause
\begin{block}{Cas d'utilisation}
\begin{itemize}
\item Changer l'ordre des commits
\item Fusionner des commits
\item Supprimer des commits
\item Modifier le contenu d'un ou plusieurs commits
\textcolor{yellow}{pick} b191156 Nouvelle fonctionnalité : F1
\textcolor{yellow}{squash} a1b72f7 Résolution de bug sur F1
\textcolor{yellow}{reword} dc4eba5 wip F2
\end{Verbatim}
\end{beamercolorbox}
\end{frame}
\begin{frame}[fragile]
\frametitle{Le rebase}
\framesubtitle{Rebase interactif -- Exemple (4/4)}
Il nous faudra encore renseigner les nouveaux messages de commits pour la fusion et le renommage. Une fois validés, Git joue les \textbf{nouveaux} commits un à un, comme pour un rebase classique.
[detached HEAD c76ff8d] Nouvelle fonctionnalité : F1
Date: Wed Jan 16 01:24:52 2019 +0100
1 file changed, 2 insertions(+)
create mode 100644 F1.txt
[detached HEAD db9f68a] Début de la fonctionnalité F2
1 file changed, 1 insertion(+)
create mode 100644 F2.txt
Successfully rebased and updated refs/heads/rebase_interactif.
$ git log --oneline
\textcolor{yellow}{db9f68a (}\textcolor{cyan}{HEAD -> }\textcolor{green}{rebase_interactif}\textcolor{yellow}{)} Début de la fonctionnalité F2
\textcolor{yellow}{c76ff8d} Nouvelle fonctionnalité : F1
[\ldots]
\end{Verbatim}
\end{beamercolorbox}\Pause
\end{frame}
\begin{frame}[fragile]
\frametitle{Le rebase}
\frametitle{Le rebase}
\framesubtitle{Rebase interactif}
\framesubtitle{Rebase interactif -- Conclusion}
Il y a beaucoup d'autres commandes : édition de commit, création de commits de fusion, exécution de commande shell\ldots~À adapter au besoin.
\medskip\Pause
\begin{block}{Soyez toujours prudents !}
Par exemple, lorsque vous changez l'ordre de commits qui modifient le même fichier. Vous risquez de vous retrouver avec des \textbf{conflits en cascade} complexes à résoudre. En cas de problèmes, utilisez la commande \verb+git rebase --abort+ pour revenir en arrière, et ré-étudiez le problème.