\begin{frame}
    \frametitle{Travail collaboratif}
    \framesubtitle{Nettoyage}
    \begin{minipage}{\textwidth}
    \begin{tikzpicture}
        %\begin{pgflowlevelscope}{\pgftransformscale{0.5}}
        \begin{pgflowlevel}{\pgftransformscale{0.6}}
        \gitDAG[grow right sep=1em]{
            fcacc8a -- a3a980c -- {6d7f839 -- {fe0c2b7 -- 6212e29 -- 0f13577 -- a60f3ed}}
        };
        \gitbranch
        {master}
        {above=of 6d7f839}
        {6d7f839}
        \gitbranch
        {histoire/confuse}
        {above=of a60f3ed}
        {a60f3ed}
        %\end{pgflowlevelscope}
        \end{pgflowlevel}
    \end{tikzpicture}
    \end{minipage}

    Le scénario proposé pour le nettoyage s'appuie sur la branche \emph{histoire/confuse}.

    Les \emph{commit} n'y sont pas cohérents : mélange de corrections syntaxiques, orthographiques et grammaticales.
    Le but est de redonner de la lisibilité à l'historique du dépôt en le réécrivant à l'aide de \commande{git rebase -i} et \commande{git add -i}.
\end{frame}
\begin{frame}
    \frametitle{Travail collaboratif}
    \framesubtitle{Nettoyage}
    \begin{enumerate}[<+->]
        \item \commande{git checkout histoire/confuse}
        \item \commande{git show master..} \# aperçu des modifications à réorganiser
        \item \commande{git rebase -i \$(git merge-base --fork-point master)} \# rebase de tous les commits depuis la divergence avec la branche \emph{master}
    \end{enumerate}
\end{frame}
\begin{frame}[fragile]
    \frametitle{Travail collaboratif}
    \framesubtitle{Nettoyage}
    À l'origine :
    \begin{minted}[fontsize=\tiny]{console}
pick fe0c2b7 Commit un peu rapide.
pick 6212e29 Premier commit de correction
pick 0f13577 Deuxième commit de correction
pick a60f3ed Troisième et dernier (on espère) commit de correction
    \end{minted}
    Ce qu'on veut faire :
    \begin{itemize}
        \item un \emph{commit} pour les espaces superflues (0f13577 et 6212e29)
        \item un \emph{commit} pour l'orthographe et la grammaire (0f13577, a60f3ed et 6212e29)
        \item un \emph{commit} pour le contresens
    \end{itemize}
\end{frame}
\begin{frame}[fragile]
    \frametitle{Travail collaboratif}
    \framesubtitle{Nettoyage}
    \begin{enumerate}[<+->]
        \item s'arrêter sur le \emph{commit} 6212e29 et répartir les modifications sur trois \emph{commit}
        \item s'arrèter sur le \emph{commit} 0f13577 et répartir les modifications sur deux \emph{commit}
        \item reformuler le message du \emph{commit} a60f3ed
    \end{enumerate}
    \begin{minted}[fontsize=\tiny]{console}
pick fe0c2b7 Commit un peu rapide.
e 6212e29 Premier commit de correction
e 0f13577 Deuxième commit de correction
r a60f3ed Troisième et dernier (on espère) commit de correction
    \end{minted}
\end{frame}
\begin{frame}[fragile]
    \frametitle{Travail collaboratif}
    \framesubtitle{Nettoyage}
    Pour chaque \emph{commit} édité :
    \begin{enumerate}[<+->]
        \item \commande{git reset HEAD\~{}1}
        \item \commande{git add -i}
        \item \commande{patch} et sélection du fichier à éditer
        \item validation, refus ou édition du fragment de patch
        \item sortie du mode patch
        \item \commande{git add doc/README} suivi de \commande{git commit}
        \item si il n'y a plus de modifications, \commande{git rebase --continue}, sinon, retour à l'étape 2
    \end{enumerate}
\end{frame}
\begin{frame}[fragile]
    \frametitle{Travail collaboratif}
    \framesubtitle{Nettoyage}
    \begin{minted}[fontsize=\tiny]{console}
f500056 Corrections orthographiques et grammaticales
a11256a Suppression des espaces superflues
1a03003 Corrections orthographiques et grammaticales
f48a802 Corrections orthographiques et grammaticales
9ed1adb Suppression des espaces superflues
7236369 Correction du contresens
fe0c2b7 Commit un peu rapide.
    \end{minted}
\end{frame}
\begin{frame}[fragile]
    \frametitle{Travail collaboratif}
    \framesubtitle{Nettoyage}
    Prêt pour la seconde passe.
    \begin{minted}[fontsize=\tiny]{console}
pick fe0c2b7 Commit un peu rapide.
pick 7236369 Correction du contresens
pick 9ed1adb Suppression des espaces superflues
s a11256a Suppression des espaces superflues
pick f48a802 Corrections orthographiques et grammaticales
s 1a03003 Corrections orthographiques et grammaticales
s f500056 Corrections orthographiques et grammaticales
    \end{minted}
\end{frame}
\begin{frame}[fragile]
    \frametitle{Travail collaboratif}
    \framesubtitle{Nettoyage}
    Prêt pour la seconde passe.
    \begin{minted}[fontsize=\tiny]{console}
f7caf4b Corrections orthographiques et grammaticales
cdcf39e Suppression des espaces superflues
7236369 Correction du contresens
fe0c2b7 Commit un peu rapide.
    \end{minted}
\end{frame}
\begin{frame}
    \frametitle{Travail collaboratif}
    \framesubtitle{Nettoyage}
    Évidemment, dans la situation décrite, peu de modifications mais imbriquées, un résultat équivalent mais plus rapidement obtenu avec :
    \begin{enumerate}[<+->]
        \item \commande{git reset \$(git merge-base --fork-point master)}
        \item \commande{git add -i}
    \end{enumerate}
\end{frame}
\begin{frame}
    \frametitle{Travail collaboratif}
    \framesubtitle{Nettoyage}
    \begin{minipage}{\textwidth}
    \begin{tikzpicture}
        %\begin{pgflowlevelscope}{\pgftransformscale{0.5}}
        \begin{pgflowlevel}{\pgftransformscale{0.6}}
        \gitDAG[grow right sep=1em]{
            fcacc8a -- a3a980c -- {902ae87}
        };
        \gitbranch
        {brancheindiscrete}
        {above=of 902ae87}
        {902ae87}
        %\end{pgflowlevelscope}
        \end{pgflowlevel}
    \end{tikzpicture}
    \end{minipage}

    Il ne reste plus qu'à purger les \emph{commit} de tous les fichiers embarrassants, ajoutés par inadvertance.
    \begin{enumerate}[<+->]
        \item \commande{git checkout branche\_indiscrete}
        \item \commande{git filter-branch --tree-filter "git rm password" master..}
    \end{enumerate}
    % contenu (pas trop long) de la diapositive
\end{frame}
