Git est un outil merveilleux, mais on a vite fait de créer une branche alors qu’on ne le souhaitait pas, de modifier la branche principale ou encore d’oublier des fichiers dans ses commits. Mais ne vous inquiétez pas, nous allons voir ensemble que toutes ces petites erreurs ne sont pas difficiles à corriger avec les bonnes techniques.
Je vous propose de créer un bac à sable pour vous entraîner et mettre en œuvre ce que vous avez vu précédemment.
Tout d’abord, créez un dossier "Test", qui sera notre dépôt Git, et dirigez-vous dans ce dossier.
mkdir Test cd Test
Initialisez le dépôt avec la commande git init.
Votre dépôt est maintenant initialisé. Si vous faites apparaître les dossiers masqués, vous pouvez voir le dossier .git.
Grâce à la ligne de commande ls -la
, vous pouvez faire apparaître les dossiers cachés. 😉
Passons à nos erreurs !
J’ai créé une branche que je n’aurais pas dû créer
Votre bac à sable est prêt !
Avant de créer une branche, vous devez créer votre branche principale.
Pour cela, il vous suffit d’ajouter un fichier et de le commiter.
Créez un fichier "PremierFichier.txt" dans votre répertoire Test :
touch PremierFichier.txt
Ajoutez-le avec la commande :
git add PremierFichier.txt git commit
On vous demande alors d'indiquer le message du commit puis de valider. Pour valider le message, une fois que vous l'avez écrit, appuyez sur Echap (votre curseur va basculer sur la dernière ligne) et tapez :x
.
Cette commande va sauvegarder et quitter l'éditeur des messages de commit.
Si votre branche principale se nomme master et non main, lancez les commandes suivantes comme vu dans les précédents chapitres :
git branch -M main
Vous allez maintenant créer une branche autre que la branche principale.
git branch brancheTest
Cette commande, comme nous l'avons vu précédemment, va créer la branche “brancheTest”.
Vous pouvez d'ailleurs le vérifier avec la commande git branch :
Youppiiii !
Arf... En fait, non, nous voulions ajouter nos fichiers avant de la créer et nous sommes maintenant bloqués avec cette branche que nous ne voulions pas tout de suite.
Heureusement, il est très simple sous Git de supprimer une branche que nous venons de créer. Pour cela, il suffit d'exécuter la commande :
git branch -d brancheTest
Tadammm ! Notre branche est supprimée et nous pouvons ajouter dans un premier temps nos fichiers avant de créer la branche.
Si vous avez déjà fait des modifications dans la branche que vous souhaitez supprimer, vous pouvez la supprimer avec la commande :
git branch -D brancheTest
J’ai modifié la branche principale
L’erreur est humaine et il peut arriver de modifier une branche principale par erreur... Dans ce cas, ne paniquez pas !
Si vous avez modifié votre branche principale (main ou master) avant de créer votre branche et que vous n'avez pas fait le commit, ce n’est pas bien grave. Il vous suffit de faire une remise - ou un stash en anglais.
Voyons maintenant comment cela fonctionne !
Allez sur votre branche principale pour modifier des fichiers.
Vous pouvez à tout moment voir l’état dans lequel sont vos fichiers, c’est-à-dire voir les changements qui ont été indexés ou ceux qui ne l’ont pas été, avec la commande suivante :
git status
Vous pouvez voir vos fichiers modifiés mais qui n'ont pas encore été commités.
Créez un stash avec la commande suivante :
git stash
Cela vous donne :
Assurez-vous que votre branche principale soit de nouveau propre, en faisant un nouveau git status
.
Vous devriez avoir :
Parfait ! C'est exactement ce que nous voulions. Maintenant, créez votre branche "brancheCommit".
git branch brancheCommit
Vous obtenez donc :
Vous allez basculer sur cette branche.
git checkout brancheCommit
Ce qui nous donne :
Et finalement, vous pouvez appliquer le stash pour :
récupérer les modifications que vous avez rangées dans le stash
Appliquer ces modifications sur votre nouvelle branche.
git stash apply
Cette commande va appliquer le dernier stash qui a été fait.
Si pour une raison ou une autre, vous avez créé plusieurs stash, et que le dernier n'est pas celui que vous souhaitez appliquer, pas de panique, il est possible d’en appliquer un autre..
En premier lieu, regardez la liste de vos stash avec la commande suivante :
git stash list
Cette commande va vous retourner un "tableau" des stash avec des identifiants du style :
Il suffira alors d'appeler la commande git stash
en indiquant l'identifiant.
git stash apply stash@{0}
Et voilà, le tour est joué !
J’ai modifié la branche après avoir fait un commit
Maintenant, admettons que vous ayez réalisé vos modifications et qu'en plus vous ayez fait le commit. Le cas est plus complexe, puisque vous avez enregistré vos modifications sur la branche principale, alors que vous ne deviez pas.
Allez-y, modifiez des fichiers, et réalisez le commit.
Pour réparer cette erreur, vous devez analyser vos derniers commits avec la fonction git log
. Vous allez alors récupérer l'identifiant du commit que l'on appelle couramment le hash.
Par défaut, git log va vous lister par ordre chronologique inversé tous vos commits réalisés. Nous reviendrons également en détails sur cette commande dans ce chapitre.
$ git log ca83a6dff817ec66f443420071545390a954664949 Author: Marc <Marc@gee-mail.com> Date: Mon Mar 19 21:52:11 2019 -0700
Maintenant que vous disposez de votre identifiant, gardez-le bien de côté. Vérifiez que vous êtes sur votre branche principale et réalisez la commande suivante :
git reset --hard HEAD^
Cette ligne de commande va supprimer de la branche principale votre dernier commit. Le HEAD^ indique que c'est bien le dernier commit que nous voulons supprimer. L’historique sera changé, les fichiers seront supprimés.
Créez ensuite votre nouvelle branche.
git branch brancheCommit
Vous allez basculer sur cette branche.
git checkout brancheCommit
Maintenant, vous êtes sur la bonne branche.
Renouvelez la commande git reset
, qui va appliquer ce commit sur votre nouvelle branche !
git reset --hard ca83a6df
Et voilà, le tour est joué ! :D
Le message de mon commit est erroné
Lorsque l'on travaille sur un projet avec Git, il est très important de marquer correctement les modifications effectuées dans le message descriptif. Cependant, si vous faites une erreur dans l'un de vos messages de commit, il est possible de changer le message après coup. Je vous montre comment faire dans la vidéo ci-dessous.
Attention ! Cette commande va fonctionner pour le dernier commit réalisé ! Lorsque l'on travaille sur un projet avec Git, il est très important de marquer correctement les modifications effectuées dans le message descriptif. Cependant, si vous faites une erreur dans l'un de vos messages de commit, il est possible de changer le message après coup.
Imaginez que vous veniez de faire un commit et que vous ayez fait une erreur dans votre message. L'exécution de cette commande, lorsqu'aucun élément n'est encore modifié, vous permet de modifier le message du commit précédent sans modifier son instantané. L'option -m permet de transmettre le nouveau message.
git commit --amend -m "Votre nouveau message de commit"
Et on vérifie avec git log
:
Elle est pas belle la vie ?
J’ai oublié un fichier dans mon dernier commit
Imaginez maintenant (je sais, il faut beaucoup d'imagination dans ce cours) que vous ayez fait votre commit mais que vous réalisiez que vous avez oublié un fichier. Ce n'est pas bien grave ! Il suffit de réutiliser la commande git --amend
, d'une autre manière. La fonction git --amend
, si vous avez bien compris, permet de modifier le dernier commit.
Réutilisez cette fonction sans le -m qui permettait de modifier son message.
Dans un premier temps, ajoutez votre fichier, puis réalisez le git --amend
.
git add FichierOublie.txt
git commit --amend --no-edit
Votre fichier a été ajouté à votre commit et grâce à la commande --no-edit
que vous avez ajoutée, vous n'avez pas modifié le message du commit.
git commit --amend
vous permet de sélectionner le dernier commit afin d'y ajouter de nouveaux changements en attente. Vous pouvez ajouter ou supprimer des changements afin de les appliquer avec commit --amend
.
Si aucun changement n'est en attente, --amend
vous permet de modifier le dernier message de log du commit avec -m.
En résumé
git branch -d permet de supprimer une branche.
git status permet de voir l’état des fichiers.
git stash enregistre les modifications non indexées pour une utilisation ultérieure.
git log affiche l'historique des commits réalisés sur la branche courante.
git reset --hard HEAD^ permet de réinitialiser l'index et le répertoire de travail à l'état du dernier commit.
git commit --amend permet de sélectionner le dernier commit pour y effectuer des modifications.
Vous savez maintenant comment corriger les erreurs les plus courantes sur votre dépôt local. Mais comment procéder si vous vous trompez sur votre dépôt distant ? C'est ce que nous allons découvrir dans le prochain chapitre !