Commit 2ed23b2c authored by Quentin Duchemin's avatar Quentin Duchemin

Rebase interactif v1

parent a433e01e
Pipeline #33529 passed with stage
in 26 seconds
......@@ -101,7 +101,7 @@ $ git log --graph --decorate \Pause
\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...).
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).
\bigskip
......@@ -150,7 +150,7 @@ $ git log --graph --decorate \Pause
\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 régler les éventuels conflits\ldots
\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 \\
......@@ -222,7 +222,7 @@ $ git log --graph --decorate --all
\begin{beamercolorbox}[rounded=true, shadow=true]{terminal}
\begin{Verbatim}
$ git rebase master \Pause
Rembobinage préalable de head pour pouvoir rejouer votre travail par-dessus...
Rembobinage préalable de head pour pouvoir rejouer votre travail par-dessus\ldots
Application de ajout à dev \Pause
$ git log --graph --decorate \Pause
* \textcolor{yellow}{commit 1b9926f89453896c3f11e1f75b6871d70f35c5a4 (}{\bf\textcolor{cyan}{HEAD -> }\textcolor{green}{develop}}\textcolor{yellow}{)}
......@@ -258,9 +258,168 @@ $ git log --graph --decorate \Pause
\end{beamercolorbox}
\end{frame}
\begin{frame}
\begin{frame}[fragile]
\frametitle{Le rebase}
\framesubtitle{Rebase interactif -- Principe}
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
\item \ldots
\end{itemize}
\end{block}
\end{frame}
\begin{frame}[fragile]
\frametitle{Le rebase}
\framesubtitle{Rebase interactif -- Fonctionnement}
Les commits que vous souhaitez modifier ou ré-ordonner vous sont présentés dans un éditeur. Pour chaque commit, vous pouvez choisir une action.
\medskip
\Pause
\begin{block}{Principales commandes pour le rebase interactif}
\begin{itemize}
\item \texttt{pick} : garder le commit en l'état \Pause
\item \texttt{reword} : éditer le message de commit \Pause
\item \texttt{edit} : modifier le contenu du commit \Pause
\item \texttt{squash} : fusionner avec le commit précédent \Pause
\item \texttt{drop} : supprimer le commit
\end{itemize}
\end{block}
\medskip
\Pause
Il est aussi possible de changer l'ordre des commits en les ordonnançant manuellement.
\end{frame}
\begin{frame}[fragile]
\frametitle{Le rebase}
\framesubtitle{Rebase interactif -- Exemple (1/4)}
Vous avez développé une fonctionnalité, puis commencé une deuxième sans être certain de la garder en l'état, puis réparé la première.\Pause
\medskip
\begin{beamercolorbox}[rounded=true, shadow=true]{terminal}
\begin{Verbatim}
$ echo "Ajout d'une super fonctionnalité" >> F1.txt
$ git add F1.txt && git commit -m "Nouvelle fonctionnalité : F1"
[rebase_interactif b191156] Nouvelle fonctionnalité : F1
1 file changed, 1 insertion(+)\Pause
$ echo "Début d'une autre fonctionnalité" >> F2.txt
$ git add F2.txt && git commit -m "wip F2"
[rebase_interactif dc4eba5] wip F2
1 file changed, 1 insertion(+)\Pause
$ echo "Rajout du point virgule manquant\ldots" >> F1.txt
$ git commit -am "Résolution de bug sur F1"
[rebase_interactif a1b72f7] Résolution de bug sur F1
1 file changed, 1 insertion(+), 1 deletion(-)\Pause
\end{Verbatim}
\end{beamercolorbox}
\medskip
Vous voulez maintenant pousser un historique propre pour faciliter la compréhension des autres contributeurs.
\end{frame}
\begin{frame}[fragile]
\frametitle{Le rebase}
\framesubtitle{Rebase interactif -- Exemple (2/4)}
L'historique local est dans l'état suivant :
\medskip
\begin{beamercolorbox}[rounded=true, shadow=true]{terminal}
\begin{Verbatim}
$ git log --oneline
\textcolor{yellow}{a1b72f7 (}\textcolor{cyan}{HEAD ->} \textcolor{green}{rebase_interactif}\textcolor{yellow}{)} Résolution de bug sur F1
\textcolor{yellow}{dc4eba5} wip F2
\textcolor{yellow}{b191156} Nouvelle fonctionnalité : F1
[\ldots]
\end{Verbatim}
\end{beamercolorbox}
\medskip
\Pause
\begin{block}{Objectifs}
\begin{itemize}
\item \textbf{Fusionner} les commits concernant F1 (le bug est trop minime pour en faire un commit\ldots)
\item \textbf{Renommer} le commit concernant F2 (finalement, vous gardez votre développement en l'état).
\end{itemize}
\end{block}
\end{frame}
\begin{frame}[fragile]
\frametitle{Le rebase}
\framesubtitle{Rebase interactif -- Exemple (3/4)}
On lance la commande de rebase, et on arrive dans un éditeur avec le contenu suivant.
{\tiny Les commits les plus anciens sont en haut, contrairement aux logs}
\medskip
\begin{beamercolorbox}[rounded=true, shadow=true]{terminal}
\begin{Verbatim}
$ git rebase -i HEAD~3
\textcolor{yellow}{pick} b191156 Nouvelle fonctionnalité : F1
\textcolor{yellow}{pick} dc4eba5 wip F2
\textcolor{yellow}{pick} a1b72f7 Résolution de bug sur F1
\end{Verbatim}
\end{beamercolorbox}
\medskip\Pause
On change l'ordre des commits ainsi que les commandes, puis on quitte l'éditeur.
\medskip
\begin{beamercolorbox}[rounded=true, shadow=true]{terminal}
\begin{Verbatim}
\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.
\medskip\Pause
\begin{beamercolorbox}[rounded=true, shadow=true]{terminal}
\begin{Verbatim}
[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}
\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.
\end{block}
\end{frame}
\begin{frame}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment