Découvrir Git avec Bitbucket Cloud

Découvrez comment annuler des changements dans Git à l'aide de Bitbucket Cloud

Objectif

Découvrez comment annuler des changements sur votre machine locale et dans un dépôt Bitbucket Cloud, tout en collaborant avec d'autres utilisateurs.

Mission

Ce tutoriel couvre les commandes suivantes : git revert, git reset, git log et git status

Durée Public Prérequis

40 minutes

Ce tutoriel suppose une certaine connaissance des commandes git suivantes :

git clone, git commit, git pull et git push
Vous avez installé Git
Vous possédez un compte Bitbucket

Tout le monde fait des erreurs. Aucun push n'est parfait, c'est pourquoi ce tutoriel vous aidera à utiliser les fonctions Git les plus courantes pour annuler un ou plusieurs changements en toute sécurité.

Ce tutoriel suppose une certaine connaissance des commandes Git suivantes :

Si vous ne connaissez pas ces commandes, nous pouvons vous aider : Découvrez Git avec Bitbucket Cloud. Revenez ensuite ici pour apprendre à annuler les changements. Ces commandes Git sont applicables à un environnement Windows ou Unix. Ce tutoriel utilisera des utilitaires de ligne de commande Unix pour la navigation dans le système de fichiers.

Annuler des changements sur votre machine locale

Lorsque le changement que vous souhaitez annuler se trouve sur votre système local et n'a pas été pushé vers un dépôt distant, il existe deux façons principales de l'annuler :

Commande Définition

Git revert

Une commande d'« annulation », mais pas une opération d'annulation classique. Au lieu de supprimer le commit, elle détermine comment inverser les changements dans le commit, puis ajoute un nouveau commit avec le contenu inverse. Ainsi, Git ne perd pas l'historique, lequel est important pour l'intégrité de votre historique de révision et pour une collaboration fiable.

git reset

Une commande Git polyvalente, qui annule les changements. La commande git reset dispose d'options puissantes, mais nous utiliserons simplement les modes de reset suivants pour ce tutoriel :

  • --soft : réinitialise uniquement la réf HEAD au commit sélectionné. Son fonctionnement est globalement le même que git checkout , mais cette commande ne crée pas un état « HEAD détaché ».
  • --mixed : réinitialise la réf HEAD à l'état du commit sélectionné dans l'historique et annule les changements dans l'index.
  • --hard : réinitialise la réf HEAD à l'état du commit sélectionné dans l'historique, annule les changements dans l'index et dans le répertoire de travail. Nous ne testerons pas la commande hard reset dans le cadre de ce tutoriel.

Pour une description complète du fonctionnement de git reset, reportez-vous au chapitre Utilitaires Git – Reset démystifié sur git-scm.com.

Au fur et à mesure de votre avancement dans le tutoriel, vous découvrirez plusieurs autres commandes Git en apprenant à annuler des changements. C'est parti !

Forker un dépôt

Commençons par créer un dépôt unique, qui comprend l'ensemble du code du dépôt d'origine. Ce processus est appelé « forker un dépôt ». Le fork est un processus Git étendu qui est possible lorsqu'un dépôt partagé est hébergé à l'aide d'un service d'hébergement tiers, comme Bitbucket.

  1. Cliquez sur l'URL suivante ou saisissez-la : https://bitbucket.org/atlassian/tutorial-documentation-tests/commits/all
  2. Cliquez sur le symbole + dans la barre latérale gauche, puis sélectionnez Fork this repository (Forker ce dépôt), passez en revue la boîte de dialogue, puis cliquez sur Fork repository (Forker le dépôt).
  3. Vous devriez être redirigé vers l'aperçu du nouveau dépôt.
  4. Cliquez sur le symbole + et sélectionnez Clone this repository (Cloner ce dépôt).
  5. Sur votre ordinateur, clonez le dépôt.
  6. Accédez au répertoire contenant le dépôt cloné.

Maintenant que vous disposez d'un dépôt rempli de code et d'un historique existant sur votre système local, vous êtes prêt à commencer à annuler certains changements.

Rechercher des changements sur votre système local

Vous devrez être capable de trouver et de référencer le changement que vous voulez annuler. Pour ce faire, vous pouvez parcourir l'interface utilisateur de commit sur Bitbucket. Par ailleurs, il existe quelques utilitaires de ligne de commande capables de localiser un changement spécifique.

git status

git status renvoie l'état de votre répertoire de travail (l'emplacement du dépôt sur votre système local) et de la zone de staging (où vous préparez un ensemble de changements à ajouter à l'historique du projet), et indique tous les fichiers qui ont été modifiés et s'ils ont été ajoutés à la zone de staging. À présent, exécutons git status et examinons l'état actuel du dépôt.

$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working tree clean

La sortie de git status ci-dessus nous montre que tout est à jour avec la branche principale à distance et qu'aucun changement n'est en attente de commit. Dans l'exemple suivant, nous allons effectuer quelques éditions dans le dépôt, et l'examiner à l'état « Changements en attente ». Cela signifie que le dépôt sur votre système local contient des changements de fichiers que vous n'avez pas préparés (ou stagés) pour les ajouter à l'historique du projet.

Pour illustrer l'exemple suivant, ouvrez d'abord le fichier myquote2.html. Apportez certains changements au contenu de myquote2.html, enregistrez, puis quittez le fichier. Exécutons à nouveau git status pour examiner le dépôt à cet état.

$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
 
Changes not staged for commit:
 (use "git add <file>..." to update what will be committed)
 (use "git checkout -- <file>..." to discard changes in working directory)
 
 Modified: myquote2.html
 
no changes added to commit (use "git add" and/or "git commit -a")
--

La sortie ci-dessus montre que des changements sont en attente dans le dépôt pour myquote2.html. Bonne nouvelle ! Si le changement que vous voulez annuler n'a pas encore été ajouté à la zone de staging, comme dans l'exemple ci-dessus, vous pouvez simplement modifier le fichier et continuer. Git ne commence à suivre un changement que lorsque vous l'ajoutez à la zone de staging et que vous le commitez dans l'historique du projet.

Annulons à présent les changements que nous avons apportés à myquote2.html. Comme il s'agit d'un exemple simplifié avec des changements minimaux, nous disposons de deux méthodes pour annuler les changements. Si nous exécutons git checkout myquote2.html, le dépôt restaurera myquote2.html à la version précédemment commitée. Nous pouvons également exécuter git reset --hard pour restaurer tout le dépôt à l'état du dernier commit.

Git log

La commande git log vous permet de lister l'historique du projet, de le filtrer et de rechercher des changements spécifiques. Alors que git status vous permet d'inspecter le répertoire de travail et la zone de staging, git log affiche uniquement l'historique commité.

Vous retrouverez cette entrée de journal de l'historique des commits dans l'interface utilisateur de Bitbucket en accédant à la vue « commits » d'un dépôt. La vue « commits » de notre dépôt de démo se trouve à l'adresse suivante : https://bitbucket.org/dans9190/tutorial-documentation-tests/commits/all. Cette vue affiche une sortie similaire à celle de l'utilitaire de ligne de commande git log. Elle peut être utilisée pour trouver et identifier un commit à annuler.

Dans l'exemple suivant, vous pouvez voir plusieurs choses dans l'historique, mais chaque changement est, à la base, un commit. C'est donc ce que nous devons trouver et annuler.

$ git status
On branch master
Your branch is up-to-date with 'origin/master'.

nothing to commit, working tree clean

$ git log

commit 1f08a70e28d84d5034a8076db9103f22ec2e982c
Author: Daniel Stevens <dstevens@atlassian.com>
Date:   Wed Feb 7 17:06:50 2018 +0000

    Initial Bitbucket Pipelines configuration

commit 52f823ca251a132225dd1cc18ad768de8d336e84
Author: Daniel Stevens <dstevens@atlassian.com>
Date:   Fri Sep 30 15:50:58 2016 -0700

    repeated quote to show how a change moves through the process

commit 4801b87c2147dce83f1bf31acfcffa6cb1d7e0a5
Merge: 1a6a403 3b29606
Author: Dan Stevens [Atlassian] <dstevens@atlassian.com>
Date:   Fri Jul 29 18:45:34 2016 +0000

    Merged in changes (pull request #6)

    Changes

Examinons d'un peu plus près l'un des commits de la liste :

commit 52f823ca251a132225dd1cc18ad768de8d336e84
Author: Daniel Stevens <dstevens@atlassian.com>
Date:   Fri Sep 30 15:50:58 2016 -0700
 
    repeated quote to show how a change moves through the process

Ce que vous pouvez voir, c'est que chaque message de commit comporte quatre éléments :

Élément Description

Empreinte de commit

Une chaîne alphanumérique (codée avec SHA-1) qui identifie un changement spécifique

Auteur

La personne qui a commité le changement

Date

La date à laquelle le changement a été commité dans le projet

Message de commit

Une chaîne de texte qui décrit le ou les changements.

Bonne pratique : écrivez de courts messages descriptifs de commit, et vous contribuerez à créer un dépôt de travail plus harmonieux pour tous.


Trouver un commit spécifique

Il est très probable que le changement que vous souhaitez annuler remonte à un certain temps dans l'historique du projet, et ce dernier peut-être volumineux. Nous allons donc vous montrer quelques opérations de base utilisant git log pour trouver un changement spécifique.

  1. Accédez à votre fenêtre de terminal et naviguez jusqu'au niveau supérieur de votre dépôt local en utilisant la commande cd (changer de répertoire).
$ cd ~/repos/tutorial-documentation-tests/

Saisissez la commande git log --oneline. Ajouter --oneline affichera chaque commit sur une seule ligne, ce qui vous permet de voir plus d'historique sur votre terminal.

Appuyez sur la touche q pour quitter le journal de commit et revenir à votre invite de commande à tout moment.

Vous devriez voir quelque chose comme ça :

$ git log --oneline
1f08a70 (HEAD -> master, origin/master, origin/HEAD) Initial Bitbucket Pipelines configuration
52f823c repeated quote to show how a change moves through the process
4801b87 Merged in changes (pull request #6)
1a6a403 myquote edited online with Bitbucket
3b29606 (origin/changes) myquote2.html edited online with Bitbucket
8b236d9 myquote edited online with Bitbucket
235b9a7 testing prs
c5826da more changes
...
  1. Appuyez sur la touche q pour revenir à votre invite de commande à tout moment.
  2. Trouvez le commit portant l'empreinte c5826da et more changes dans la liste générée par la commande git log. Quelqu'un n'a pas écrit de message de commit descriptif, nous devrons donc déterminer si ce message contient les changements dont nous avons besoin.
  3. Mettez en surbrillance l'empreinte du commit c5826da et copiez-la depuis la sortie de git log dans votre fenêtre de terminal.
  4. Saisissez git show, puis collez ou transcrivez l'empreinte de commit copiée et appuyez sur Entrée. Vous devriez voir un résultat similaire à celui-ci :
$git show c5826daeb6ee3fd89e63ce35fc9f3594fe243605
commit c5826daeb6ee3fd89e63ce35fc9f3594fe243605
Author: Daniel Stevens <dstevens@atlassian.com>
Date:   Tue Sep 8 13:50:23 2015 -0700

    more changes

diff --git a/README.md b/README.md
index bdaee88..6bb2629 100644
--- a/README.md
+++ b/README.md
@@ -11,12 +11,7 @@ This README would normally document whatever steps are necessary to get your app
 ### How do I get set up? ###

 * Summary of set up
-* Configuration
-* Dependencies
-* Database configuration
-* How to run tests
-* Deployment instructions
-* more stuff and things
:

L'invite en bas continue à se remplir jusqu'à indiquer le changement complet. Appuyez sur q pour quitter votre invite de commande.

Filtrer git log pour trouver un commit spécifique

Vous pouvez filtrer et ajuster la sortie de git log grâce aux ajouts suivants :

Ce filtre Résultat Cet exemple de commande Se traduit par
-

Limite le nombre de commits affichés

git log -10

Les 10 commits les plus récents dans l'historique

--after

--before

Limite les commits affichés à la période associée

Vous pouvez également utiliser --after "aaaa-mm-jj" --before "aaaa-mm-jj"

git log --after 2017-07-04

Tous les commits postérieurs au 4 juillet 2017

--author="nom"

Liste tous les commits dont l'auteur correspond à la valeur « nom »

git log --author="Alana"

Tous les commits réalisés par un auteur portant le nom d'Alana

--grep="chaîne de message"

Renvoie tous les commits contenant un message de commit correspondant à la chaîne indiquée

git log --grep="HOT-"

Tous les commits contenant HOT- comme chaîne de texte dans leur message

C'était un bref coup de projecteur sur la commande git log. Si vous aimez utiliser cette commande, vous apprécierez sans doute le tutoriel avancé sur git log.

Annuler un changement grâce à git reset

Pour commencer, annulons simplement le dernier commit dans l'historique. Le cas échéant, disons que vous venez d'activer des pipelines de solution de CI/CD Bitbucket, mais vous réalisez que le script n'est pas adapté.

  1. Saisissez git log --oneline dans votre fenêtre de terminal.
  2. Copiez l'empreinte de commit pour le second commit dans log: 52f823c, puis appuyez sur q pour quitter le journal.
  3. Saisissez git reset --soft 52f823c dans votre fenêtre de terminal. En cas de réussite, la commande devrait s'exécuter en arrière-plan. Et voilà, vous venez d'annuler votre premier changement. Voyons maintenant le résultat de cette action.
  4. Saisissez git status dans votre fenêtre de terminal, et vous verrez que le commit a été annulé et qu'il apparaît maintenant comme un changement non commité. Vous devriez obtenir un résultat similaire à celui-ci :
$ git status
On branch master
Your branch is behind 'origin/master' by 1 commit, and can be fast-forwarded.
  (use "git pull" to update your local branch)
 
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)
 
    new file:   bitbucket-pipelines.yml
  1. Saisissez git log --oneline dans votre fenêtre de terminal. Vous devriez voir un résultat similaire à celui-ci :
$ git log --oneline
52f823c repeated quote to show how a change moves through the process
4801b87 Merged in changes (pull request #6)
1a6a403 myquote edited online with Bitbucket
3b29606 (origin/changes) myquote2.html edited online with Bitbucket
8b236d9 myquote edited online with Bitbucket
235b9a7 testing prs
c5826da more changes
43a87f4 remivng
d5c4c62 a few small changes
23a7476 Merged in new-feature2 (pull request #3)
5cc4e1e add a commit message
cbbb5d6 trying a thing
438f956 adding section for permissions and cleaning up some formatting
23251c1 updated snipptes.xml organization into resources. other files misc changes
3f630f8 Adding file to track changes
...
  1. Vous pouvez voir que la nouvelle réf HEAD de la branche est le commit 52f823c, exactement ce que vous vouliez.
  2. Appuyez sur q pour quitter le journal. Laissez votre terminal ouvert, car maintenant que vous avez appris à exécuter une simple commande reset, nous allons essayer quelque chose d'un petit peu plus complexe.

Annuler plusieurs changements grâce à git reset

Disons que vous avez réalisé que la pull request 6 (4801b87) devait être retravaillée, et que, pour garder un historique clair, vous souhaitiez réinitialiser la réf HEAD au commit 1a6a403. Cette fois, vous utiliserez la commande git reset.

  1. Saisissez git log --online
  2. Copiez l'empreinte du commit 1a6a403 (myquote édité en ligne avec Bitbucket), le commit juste sous la pull request 6, qui contient les changements que nous voulons annuler.
  3. Saisissez git reset 1a6a403 dans votre fenêtre de terminal. La sortie devrait ressembler à ce qui suit :
$ git reset 1a6a403
Unstaged changes after reset:
M README.md
M myquote2.html

Vous pouvez voir que les changements sont maintenant à un état non commité. Cela signifie que nous avons maintenant supprimé plusieurs changements à la fois de l'historique du projet et de la zone de staging.

  1. Saisissez git status dans votre fenêtre de terminal. La sortie devrait ressembler à ce qui suit :

$ git status
On branch master
Your branch is behind 'origin/master' by 6 commits, and can be fast-forwarded.
  (use "git pull" to update your local branch)
 
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)
 
    modified:   README.md
    modified:   myquote2.html
 
Untracked files:
  (use "git add <file>..." to include in what will be committed)
 
    bitbucket-pipelines.yml
 
no changes added to commit (use "git add" and/or "git commit -a")

À présent, vous pouvez voir que le premier changement que nous avons annulé (le fichier bitbucket-pipelines.yml) n'est plus suivi par Git. En effet, l'appel de la commande git reset supprime le changement de la réf HEAD de la branche et de la zone de suivi ou d'indexation de Git. Le processus sous-jacent est un peu plus complexe que ce que nous pouvons couvrir ici, vous pourrez en découvrir plus dans git reset.

  1. Saisissez git log --oneline dans votre fenêtre de terminal.
1a6a403 myquote edited online with Bitbucket
8b236d9 myquote edited online with Bitbucket
43a87f4 remivng
d5c4c62 a few small changes
23a7476 Merged in new-feature2 (pull request #3)
5cc4e1e add a commit message
cbbb5d6 trying a thing
438f956 adding section for permissions and cleaning up some formatting
23251c1 updated snipptes.xml organization into resources. other files misc changes
3f630f8 Adding file to track changes
e52470d README.md edited online with Bitbucket
e2fad94 README.md edited online with Bitbucket
592f84f Merge branch 'master' into new-feature2 Merge branch  especially if it merges an updated upstream into a topic branch.
7d0bab8 added a line
879f965 adding to the quote file
8994332 Merged in HOT-235 (pull request #2)
b4a0b43 removed sarcastic remarks because they violate policy.
b5f5199 myquote2.html created online with Bitbucket
b851618 adding my first file
5b43509 writing and using tests

La sortie du journal montre maintenant que l'historique du commit a également été modifié et démarre au commit 1a6a403. À des fins d'illustration et pour donner un exemple supplémentaire, disons que nous voulons maintenant annuler le reset que nous venons de faire. Après mûre réflexion, nous voulions peut-être conserver le contenu de la pull request 6.

Faire un push de resets dans Bitbucket

La commande git reset est l'une des rares méthodes d'« annulation » proposées par Git. Les resets sont généralement considérés comme une option « peu sûre » pour annuler les changements. Ils sont acceptables lorsque l'on travaille en local, dans un code isolé, mais deviennent dangereux lorsqu'ils sont partagés avec les membres de l'équipe.

Pour partager une branche qui a été réinitialisée auprès d'une équipe distante, il faut effectuer un « push forcé ». Un « push forcé » est initié par l'exécution de la commande git push -f. Un « push forcé » détruit tout l'historique développé sur la branche après le push.

Voici un exemple de ce scénario « dangereux » :

  • Le développeur A développe une nouvelle fonctionnalité sur une branche.
  • Le développeur B développe une fonctionnalité distincte sur la même branche.
  • Le développeur B décide de réinitialiser la branche à un état antérieur au début du travail des développeurs A et B.
  • Le développeur B fait alors un push forcé de la branche reset vers le dépôt distant.
  • Le développeur A fait un pull de la branche pour obtenir les mises à jour. Pendant ce pull, le développeur A reçoit la mise à jour forcée. Cela réinitialise la branche locale du développeur A à un état précédent tout travail sur les fonctionnalités et lui fait perdre ses commits.

Annuler une commande git reset

Jusqu'à présent, nous avons transmis des empreintes SHA de git commità git reset. Il manque désormais des commits (qui ont été réinitialisés) dans la sortie de git log. Comment allons-nous récupérer ces commits ? Git ne supprime jamais complètement un commit, à moins qu'il ne soit détaché de tous ses pointeurs. De plus, Git stocke un journal distinct de tous les mouvements de réfs, le « reflog ». Nous pouvons consulter le reflog en exécutant la commande git reflog.

1a6a403 HEAD@{0}: reset: moving to 1a6a403
1f08a70 HEAD@{1}: reset: moving to origin/master
1f08a70 HEAD@{2}: clone: from git@bitbucket.org:dans9190/tutorial-documentation-tests.git

La sortie de git reflog devrait être similaire à ce qui précède. Vous pouvez voir l'historique des actions dans le dépôt. La ligne du haut fait référence au reset que nous avons effectué pour réinitialiser la pull request 6. Réinitialisons maintenant le reset pour rétablir la pull request 6. La deuxième colonne de cette sortie de reflog indique un pointeur de réf vers un changement effectué dans le dépôt. Ici, HEAD@{0} est une référence à la commande reset que nous avons exécutée précédemment. Nous ne voulons pas donner suite à cette commande reset, nous allons donc restaurer le dépôt à la réf HEAD@{1}.

$ git reset --hard HEAD@{1}
HEAD is now at 1f08a70 Initial Bitbucket Pipelines configuration

À présent, examinons l'historique de commit des dépôts en exécutant git log --oneline :

$git log --online
1f08a70 Initial Bitbucket Pipelines configuration
52f823c repeated quote to show how a change moves through the process
4801b87 Merged in changes (pull request #6)
1a6a403 myquote edited online with Bitbucket
3b29606 myquote2.html edited online with Bitbucket
8b236d9 myquote edited online with Bitbucket
235b9a7 testing prs
c5826da more changes
43a87f4 remivng
d5c4c62 a few small changes
23a7476 Merged in new-feature2 (pull request #3)
5cc4e1e add a commit message
cbbb5d6 trying a thing
438f956 adding section for permissions and cleaning up some formatting
23251c1 updated snipptes.xml organization into resources. other files misc changes
3f630f8 Adding file to track changes
e52470d README.md edited online with Bitbucket
e2fad94 README.md edited online with Bitbucket
592f84f Merge branch 'master' into new-feature2 Merge branch  especially if it merges an updated upstream into a topic branch.
7d0bab8 added a line
:

Dans l'exemple ci-dessus, nous pouvons voir que l'historique de commit du dépôt a été restauré à la version précédente dans laquelle nous faisions des expériences. Nous pouvons voir que le commit 4801b87 a été restauré même s'il semblait perdu après le premier reset. La commande git reflog est un outil puissant pour annuler des changements dans le dépôt. Découvrez comment l'utiliser plus en détail sur la page relative à git reflog.

Git revert

Les exemples précédents présentaient d'importantes opérations d'annulation à l'aide des commandes git reset et git reflog. Git contient un autre utilitaire d'annulation qui est souvent considéré comme plus « sûr » que le reset. Le revert crée des commits qui contiennent l'inverse des changements introduits par les commits spécifiés. Ces commits de revert peuvent ensuite être pushés en toute sécurité vers des dépôts distants pour être partagés avec d'autres développeurs.

La section suivante illustrera l'utilisation de git revert. Poursuivons avec l'exemple de la section précédente. Pour commencer, examinons le journal et trouvons un commit à restaurer.

$ git log --online
1f08a70 Initial Bitbucket Pipelines configuration
52f823c repeated quote to show how a change moves through the process
4801b87 Merged in changes (pull request #6)
1a6a403 myquote edited online with Bitbucket
1f08a70 Initial Bitbucket Pipelines configuration
52f823c repeated quote to show how a change moves through the process
4801b87 Merged in changes (pull request #6)
1a6a403 myquote edited online with Bitbucket
3b29606 myquote2.html edited online with Bitbucket
8b236d9 myquote edited online with Bitbucket
235b9a7 testing prs
c5826da more changes
43a87f4 remivng
d5c4c62 a few small changes
23a7476 Merged in new-feature2 (pull request #3)
5cc4e1e add a commit message
cbbb5d6 trying a thing
438f956 adding section for permissions and cleaning up some formatting
23251c1 updated snipptes.xml organization into resources. other files misc changes
3f630f8 Adding file to track changes
e52470d README.md edited online with Bitbucket
e2fad94 README.md edited online with Bitbucket
592f84f Merge branch 'master' into new-feature2 Merge branch  especially if it merges an updated upstream into a topic branch.
7d0bab8 added a line
:

Pour cet exemple, choisissons le commit le plus récent, 1f08a70. Pour ce scénario, disons que nous voulons annuler les éditions apportées dans ce commit. Exécutez :

$ git revert 1f08a70

Cela va lancer un workflow git merge. Git crée alors un commit dont le contenu est l'inverse de celui qui a été spécifié pour le revert. Git ouvre ensuite un éditeur de texte configuré pour demander un nouveau message de commit. Les reverts sont considérés comme l'option d'annulation la plus sûre en raison de ce workflow de commit. La création de commits de revert laisse une trace claire dans l'historique du commit du moment où une opération d'annulation a été exécutée.

Vous venez d'apprendre à annuler des changements !

Félicitations, vous avez terminé ! Revenez à ce tutoriel à tout moment ou rendez-vous dans la section « Annuler des changements » pour approfondir vos connaissances. Bonne continuation dans Bitbucket !