Accéder au contenu principal

Les 20 meilleures commandes Git avec des exemples : Guide pratique

Ce guide couvre les commandes Git les plus essentielles avec des exemples pour vous aider à travailler plus efficacement !
Actualisé 4 mars 2025  · 15 min de lecture

Git est un outil essentiel pour toute personne travaillant avec du code, qu'il s'agisse d'un développeur de logiciels, d'un scientifique des données, d'un ingénieur des données ou d'un praticien de l'apprentissage automatique. Il permet aux équipes de collaborer simultanément sur le même projet tout en fournissant un historique clair des modifications du code, ce qui facilite le cursus et la gestion des mises à jour.

Dans cet article, je vais vous présenter les commandes Git les plus couramment utilisées, leur syntaxe, et comment les appliquer dans votre travail quotidien !

Commandes de base de Git

Les étapes de base du travail avec Git comprennent la création d'un dépôt, la copie d'un dépôt existant et l'édition du code. Cette section abordees fonctions fondamentales de git en détail, ainsi quela syntaxe pour les mettre en œuvre .

Besoin d'installer Git ? Suivez ce guide pour installer Git sur votre système.

git init

La commande git init crée un nouveau dépôt Git ou réinitialise un dépôt existant.  

Lorsque vous exécutez la commande, votre répertoire actuel devient un dépôt Git, ce qui vous permet de suivre ses modifications. Il ajoute un dossier caché .git dans le répertoire, où Git stocke toutes les métadonnées, l'historique des versions et les journaux relatifs au projet.

git clone

Pour copier un dépôt Git d'un endroit à un autre, nous utilisons la commande git clone. Il copie généralement un dépôt existant, y compris les journaux et les versions, depuis des serveurs distants tels que GitHub ou GitLab vers votre machine locale. 

Étape 1 : Naviguez jusqu'au dépôt GitHub que vous souhaitez cloner et cliquez sur "Code".

commande git clone

commande git clone

Étape 2 : Copiez l'URL comme indiqué dans l'image. 

commande de base git clone

commande de base git clone

Étape 3 : Allez dans le répertoire où vous voulez cloner ce dépôt sur la machine locale et exécutez la commande suivante : 

git clone <copied_URL>

git status

La commande git status nous donne des détails sur : 

  • les fichiers modifiés (fichiers modifiés mais non mis en scène).
  • les fichiers non suivis (fichiers dont Git n'assure pas le cursus).
  • les fichiers mis à disposition (fichiers mis à disposition et prêts à être livrés).

Voici la syntaxe :

git status 

 Commande Git status

Commande Git status

git add

La commande git add ajoute vos modifications à la zone de transit. Elle indique à Git que le référentiel doit mettre à jour ces modifications une fois que l'utilisateur exécute la commande "commit".

  • git add . : met en scène les modifications apportées à tous les fichiers. 
  • git add Le fichier d'étape : inclut uniquement les modifications apportées à un fichier spécifique dans la zone d'étape.

git commit

Une commande git commit enregistre les modifications que vous avez effectuées (ou mises en scène) dans le référentiel local. Chaque fois que vous exécutez git commit, Git crée un instantané de votre dépôt à ce moment-là. Cela vous permet de revenir à un commit précédent lorsque cela est nécessaire.

Voici la syntaxe :

git commit -m "commit_message"

Le message de livraison est une brève description des modifications apportées lors d'une livraison.

Apprenez les bases de Git dès aujourd'hui

Pour les débutants : Maîtriser le contrôle des versions à l'aide de Git.
Commencez à apprendre gratuitement

Travailler avec des référentiels distants

GitHub héberge diverses applications sur ses serveurs distants, ce qui permet aux développeurs de les suivre et de les gérer. Dans cette section, nous verrons comment extraire, transférer et interagir avec ces dépôts distants à l'aide de commandes Git. 

Vous voulez savoir comment fonctionne GitHub ? Commencez par une introduction aux concepts de GitHub pour comprendre les dépôts, les demandes d'extraction et les meilleures pratiques de collaboration.

git remote add

La commande git remote add crée une connexion entre votre dépôt Git local et le dépôt Git distant, ce qui vous permet de pousser et de tirer des modifications entre les deux :

git remote add <repo_name> <remote_url>
  • : un surnom pour le dépôt distant ("origin" par défaut).
  • URL du référentiel distant.

git push

La commande git push synchronise votre dépôt distant avec le dépôt local. Une fois que vous aurez exécuté cette commande, le référentiel distant reflétera toutes les modifications que vous avez effectuées localement.

git push <remote> <branch>
  • alias du référentiel distant ("origin" par défaut).
  • : nom de la branche que vous voulez pousser.

Il existe quelques variantes de git push, par exemple :

git push ---all origin

La commande ci-dessus pousse toutes vos branches locales vers le dépôt distant.

git push --force origin main

La commande ci-dessus écrase la branche main du référentiel distant par votre branche locale main. Soyez prudent lorsque vous l'utilisez, car la branche principale distante peut perdre tout son historique. 

git pull

La commande git pull récupère et fusionne les modifications du référentiel distant avec celles du référentiel local. 

La commande git pull combine deux commandes : git fetch et git merge

Tout d'abord, git fetch récupère toutes les modifications du dépôt distant, y compris les nouveaux commits, les étiquettes et les branches. Ensuite, git merge s'exécute et intègre ces modifications à la branche locale actuelle. 

Voici la syntaxe :

git pull origin feature-branch

La commande ci-dessus récupère les données de feature_branch sur le dépôt distant et les transfère dans votre branche locale actuelle. 

git fetch

La commande git fetch vous permet d'examiner les changements dans le référentiel distant avant de les fusionner dans votre référentiel local. Il télécharge les modifications et les met à jour dans les branches de suivi à distance. Pour ceux qui ne connaissent pas, les branches de suivi à distance sont des copies des branches du référentiel à distance. 

Par exemple, la commande suivante télécharge les modifications dans le référentiel distant et les met à jour dans les branches de suivi à distance sous origin:

git fetch origin

Branchement et fusion dans Git

Les branches Git permettent aux développeurs de travailler indépendamment sur de nouvelles fonctionnalités ou des corrections de bogues sans affecter le dépôt principal. Une fois que les modifications sont prêtes, la fusion les intègre dans la base de code principale. Examinons les principales commandes impliquées dans ce processus.

branche git

La commande git branch permet de répertorier, de créer ou de supprimer des branches. Une branche est une autre version de votre référentiel. 

Si vous développez une nouvelle fonctionnalité pour votre application, vous pouvez créer une nouvelle branche et y travailler. Vous pouvez tout fusionner dans la branche principale une fois que tout est prêt et testé. Cela vous permet de travailler sur de nouvelles fonctionnalités de manière indépendante sans avoir à intervenir directement sur la ligne principale.  

  • git branch: produit la liste de toutes les branches du référentiel.
  • git branch : crée une nouvelle branche nommée "nom_de_la_branche".
  • git branch -d : Supprime la branche nommée "nom_branche".

git checkout

Lacommande git checkoutpermet de faire deux choses : passer d'une branche à l'autre ou restaurer des fichiers dans un état antérieur.

  • Changez de branche : Avant git 2.23, la commande git checkout branch_name était utilisée pour passer de votre branche actuelle à une autre. Mais il ne s'agit pas seulement de passer d'une branche à l'autre ; vous pouvez également créer une nouvelle branche et y passer.

La commande suivante crée une nouvelle branche nommée "feature_branch" et y bascule :

git checkout -b feature_branch

Cependant, dans la dernière version de Git, git checkout est remplacé par git switch pour restaurer les fichiers. 

  • Restaurer des fichiers : Vous pouvez annuler les modifications que vous avez apportées à un fichier et le restaurer à sa version précédente à l'aide de la commande suivante.
git checkout -- <file-name>

Vous pouvez également le faire avec un fichier provenant d'une autre branche comme suit :

git checkout <branch-name> -- <file-name>

git merge

Si vous avez travaillé sur une nouvelle branche, vous pouvez la fusionner avec la branche principale en utilisant git merge pour implémenter les changements. Git effectue des fusions de deux manières :

  • Fusion rapide : Supposons que vous ayez créé une nouvelle branche nommée "feature_x" à partir de la branche principale et que vous ayez travaillé dessus. Si la branche principale n'a pas été mise à jour depuis que vous avez créé "feature_x", alors au lieu de livrer les modifications de "feature_x" à la branche principale, Git met à jour la branche principale pour qu'elle pointe vers la dernière version de "feature_x". Dans ce cas, aucun nouveau commit de fusion n'est créé. 
  • Fusion à trois : Si la branche "feature_x" et la branche principale ont toutes deux des modifications, Git combine les modifications et crée un nouveau commit de fusion sur la branche principale. 

Par exemple : 

      C---D---F (feature-branch)
     /
A---B---E---G (main)

Au commit B, la branche de fonctionnalités C est créée. La branche principale a des commits supplémentaires, E et G, même après la création de la branche de fonctionnalité. Par conséquent, la fonctionnalité est fusionnée avec la fonctionnalité principale, en créant un nouveau commit de fusion M comme suit :

      C---D---F (feature-branch)
     /         \         
A---B---E---G---M (main)

git rebase

git rebase est un autre moyen d'intégrer les changements entre les branches, mais il fonctionne différemment de git merge. La fusion conserve l'historique complet des branches principale et secondaire. Le rebasement, quant à lui, écrase l'historique des livraisons pour le rendre linéaire et propre.

En outre, la fusion nécessite un commit de fusion supplémentaire, tandis que la refonte ne crée pas de nouveaux commits. Git rebase effectue deux étapes : 

  1. Passer à une branche de fonctionnalités 
  2. Replacer dans la base principale.

Par exemple :

      C---D---F (feature-branch)
     /
A---B---E---G (main)
  • Étape 1 : exécute git checkout feature_branch.
  • Étape 2 : Exécute git rebase main: Déplacement de l'ensemble de la branche des fonctionnalités sur la branche principale en réappliquant les commits C, D, F comme C’, D’, et F’ au dessus du dernier commit G sur la branche principale. Cela crée un historique linéaire des livraisons comme suit :
A---B---E---G---C'---D'---F' (main)

Les opérations de fusion et de rebase étant souventconfondues, voici un résumé des différences :

Merge 

Rebase

Il conserve l'intégralité de l'historique des livraisons des deux branches.

Il écrase l'historique des livraisons pour le rendre linéaire.

Un commit de fusion supplémentaire est créé.

Aucun commentaire supplémentaire n'est créé.

La structure de la branche est visible dans l'historique.

Cela donne l'impression que l'historique des livraisons est une ligne droite.

Utilisez-le pour suivre l'historique des livraisons de chaque branche, y compris une chronologie des dates de fusion.

Utilisez-le lorsque vous avez besoin d'un historique des livraisons clair et facile à comprendre. 

Vous souhaitez en savoir plus sur le travail avec des succursales à distance ? Découvrez comment extraire et suivre des branches distantes à l'aide de git checkout dans ce didacticiel étape par étape.

Historique Git et annulation des modifications

Git propose plusieurs commandes permettant de consulter l'historique et d'annuler les modifications à différents stades du développement. Les commandes correspondantes sont présentées ici. 

git log

La commande git log affiche l'ensemble de l'historique des livraisons de votre branche actuelle. Il comprend quatre champs clés : le commit, l'auteur, la date et le message de commit. 

Historique des livraisons git

Historique des livraisons git

  • Engagement : un identifiant unique.
  • Auteur : nom et adresse électronique de la personne.
  • Date : Date à laquelle la modification a été validée.
  • Message d'engagement : description de l'engagement. 

git diff

Le site git diff affiche les différences entre les différents états de votre référentiel, que vous compariez votre répertoire actuel à la zone de transit, la zone de transit au dernier commit, ou même deux fichiers ou branches, selon ce que vous aurez spécifié.

  • git diff - montre la différence entre votre répertoire de travail actuel et la zone de transit. 
  • git diff -- cachedLe tableau suivant montre les différences entre la zone de transit et la dernière livraison.
  • git diff commit1 commit2 - la différence entre commit 1 et commit 2.
  • git diff branch1..branch2 - compare les différences entre branch 1 et branch 2.

git reset

La commande git reset vous permet d'annuler des modifications en réinitialisant le HEAD actuel à un état antérieur spécifique. Pour déplacer le HEAD à un commit précédent, vous disposez de trois variantes : "soft", "mixed" et "hard" à utiliser avec la commande reset. 

  • Soft: revient à un commit précédent mais conserve les modifications en cours, ce qui vous permet de les re-commander plus tard si nécessaire. 

git reset --soft HEAD~1

  • Mixte : revient à un commit précédent et supprime les modifications du commit actuel de la zone de la scène. Toutefois, ces modifications ne sont pas affectées dans votre répertoire de travail.

git reset --mixed HEAD~1

  • Dur : Cela renverra à un commit précédent tout en supprimant les mises à jour du commit actuel du répertoire de travail et de la zone de transit. 

git reset --hard HEAD~1

Vous souhaitez annuler des modifications dans Git ? Découvrez les différences entre git reset et git revert dans ce guide détaillé.

Mise en réserve et nettoyage de Git

Lorsque vous travaillez avec Git, vous pouvez avoir besoin de mettre temporairement de côté des modifications sans les valider ou de nettoyer des fichiers inutiles qui encombrent votre dépôt. C'est là que les commandes de rangement et de nettoyage de Git s'avèrent utiles.

git stash

Supposons que vous souhaitiez passer à un état antérieur mais que vous ne souhaitiez pas valider votre progression actuelle ; vous pouvez utiliser git stash. Cela permet d'enregistrer temporairement vos modifications non validées et de réinitialiser votre répertoire de travail au dernier état validé. 

git stash pop

Si vous avez caché des modifications dans le passé et que vous souhaitez les inclure dans votre répertoire de travail, utilisez la commande git stash pop. Cette opération permet d'appliquer les dernières modifications cachées au répertoire actuel et de les supprimer de la liste des modifications cachées. 

git clean

La commande git clean supprime les fichiers non suivis du dépôt Git. Utilisez la commande git clean -n pour avoir un aperçu de ce qui sera supprimé avant d'exécuter la commande clear !

Vous souhaitez nettoyer votre historique Git ? Apprenez à combiner plusieurs commits dansen un seul avec ce tutoriel Git squash.

Configuration de Git et paramètres utilisateur

Git vous permet de configurer les paramètres de l'utilisateur à différents niveaux. Explorons-les ici.

git config

La commande git config vous permet de personnaliser les paramètres de Git en fonction de vos besoins. Vous pouvez configurer les paramètres à trois niveaux : local, système et global. 

  • Au niveau du système : Il s'agit du niveau de configuration le plus large, avec un accès au niveau racine.
  • Niveau global : les configurations à ce niveau sont appliquées à tous les référentiels de l'utilisateur courant.
  • Au niveau local : Les paramètres relatifs au dépôt Git actuel peuvent être personnalisés à ce niveau. 

Voici quelques commandes courantes sur git config:

  • git config -list: Affiche les paramètres de Git de tous les niveaux.
  • git config --global user.name "Your_name": Définit le nom d'utilisateur Git pour tous les dépôts sur votre système à "Votre_nom".
  • git config --global user.email "your.email@example.com": Définit l'adresse électronique pour tous les dépôts de votre système.

Nous savons que master est la branche principale par défaut lors de l'initialisation d'un dépôt Git. Mais vous pouvez le renommer comme vous le souhaitez à l'aide de la commande suivante :

git config --global init.defaultBranch "srujana_master"

Dans la commande ci-dessus, nous avons remplacé la branche master par défaut par "srujana_master" au niveau global (pour tous les dépôts du système).

Vous pouvez appliquer d'autres paramètres au niveau global. Par exemple, pour remplacer votre éditeur de texte par défaut par VS code, exécutez la commande suivante :

git config -global core.editor "code-w"

Vous pouvez également créer vos propres commandes Git. Par exemple :

git config --global alias.slice branch

La commande ci-dessus crée un nouvel alias slice pour branch. Ainsi, si vous souhaitez créer une nouvelle branche, vous pouvez exécuter git slice branch_name au lieu de git branch branch_name.

Résumé des commandes Git

Voici un résumé des commandes Git que nous avons étudiées, que vous pourrez garder à portée de main :

Commandement

Description

Exemple d'utilisation

git init

Initialiser un nouveau dépôt Git.

git init

git clone

Cloner un dépôt Git existant.

git clone

git status

Vérifier l'état des fichiers dans le répertoire de travail.

git status

git add

Ajoutez des fichiers à la zone de transit.

git add

git commit

Livrer les modifications à l'étape dans le dépôt local.

git commit -m 'Commit message'

git remote add

Ajoutez une connexion au dépôt à distance.

git remote add origin

git push

Transférer les modifications effectuées vers un référentiel distant.

git push origin

git pull

Récupérez et fusionnez les modifications d'un référentiel distant.

git pull origin

git fetch

Récupérer les modifications d'un dépôt distant sans les fusionner.

git fetch origin

git branch

Listez, créez ou supprimez des branches.

git branch

git checkout

Passer d'une branche à l'autre ou restaurer des fichiers (ancienne méthode).

git checkout

git switch

Passer d'une branche à l'autre (préférable dans les versions les plus récentes).

git switch

git merge

Fusionner les modifications d'une branche dans une autre.

git merge

git rebase

Réappliquez les commits d'une branche à une autre pour un historique plus propre.

git rebase

git log

Voir l'historique des livraisons.

git log

git diff

Montrez les différences entre les divers états du référentiel.

git diff

git reset

Annulez les modifications en rétablissant l'état antérieur de HEAD.

git reset --soft HEAD~1

git stash

Enregistre temporairement les modifications non validées et réinitialise le répertoire de travail.

git stash

git stash pop

Appliquez les dernières modifications cachées au répertoire de travail.

git stash pop

git clean

Supprimez les fichiers non suivis du référentiel.

git clean -n

git config

Configurez les paramètres de Git au niveau du système, au niveau global ou au niveau local.

git config --global user.name 'Your Name'

Bonnes pratiques pour l'utilisation de Git

L'utilisation efficace de Git ne se limite pas au cursus des modifications : il s'agit de maintenir un flux de travail propre, structuré et collaboratif. Le respect des bonnes pratiques permet de s'assurer que votre dépôt reste organisé, que l'historique des livraisons est significatif et que votre processus de développement se déroule sans heurts.

Voici quelques habitudes à prendre lorsque vous travaillez avec Git :

  • Engagez-vous souvent : L'un des principaux objectifs de l'utilisation d'un système de contrôle de version tel que Git est d'assurer un suivi efficace des modifications au fil du temps. Lorsque vous livrez chaque changement séparément plutôt que de mettre à jour plusieurs changements ensemble, il est plus facile de comprendre ce qui a été modifié dans chaque livraison par la suite. 
  • Engagez-vous avec des messages clairs : Chaque fois que vous vous engagez, accompagnez-le d'un message clair décrivant l'objet de cet engagement. La prochaine fois que vous ferez le suivi des livraisons, il sera beaucoup plus simple de savoir quelles modifications chaque livraison a apportées au code. 
  • Utilisez des branches : Pour toute nouvelle fonctionnalité ou correction de bogue, créez une branche, travaillez dessus et fusionnez-la. Il s'agit de la meilleure pratique pour séparer les nouveaux travaux de développement du projet principal. 
  • Utilisez .gitignore : Un fichier .gitignore contientains les fichiers et répertoires liés au projet dont le cursus n'est pas nécessaire. Il s'agit généralement de fichiers générés automatiquement, d'artefacts de construction, de fichiers journaux, de fichiers temporaires et de fichiers spécifiques à la plate-forme. En les ignorant, vous éviterez les journaux inutiles et les versions de cursus, ce qui vous permettra de conserver un historique propre.

Conclusion

Git est un outil puissant qui permet de suivre les modifications, de collaborer avec d'autres personnes et de maintenir un flux de développement bien structuré. Dans cet article, j'ai abordé les commandes Git essentielles et les meilleures pratiques pour vous aider à gérer vos projets plus efficacement.

Bien sûr, il y a toujours plus à apprendre ! Si vous commencez à peine, consultez Introduction à Git pour acquérir des bases solides. Pour ceux qui souhaitent affiner leurs compétences, la version intermédiaire de Git permet d'approfondir les flux de travail et les techniques avancés.

Vous avez besoin d'une référence Git rapide pour vos futurs projets ? Gardez les commandes essentielles à portée de main grâce à cet aide-mémoire Git!

Apprenez les bases de Git dès aujourd'hui

Pour les débutants : Maîtriser le contrôle des versions à l'aide de Git.

FAQ

Quelle est la différence entre git pull et git fetch ?

git pull récupère les modifications d'un dépôt distant et les fusionne dans votre branche locale, tandis que git fetch ne télécharge que les mises à jour, ce qui vous permet de les passer en revue avant de les fusionner.

Comment renommer une branche Git ?

Pour renommer la branche actuelle :

git branch -m new-branch-name

Si vous renommez une autre branche :

git branch -m old-branch-name new-branch-name

Comment supprimer une branche dans Git ?

Pour supprimer une branche locale :

git branch -d branch-name

Pour supprimer une branche distante :

git push origin --delete branch-name

Quelle est la différence entre git merge et git rebase ?

git merge combine les modifications de différentes branches tout en préservant l'historique, tandis que git rebase réécrit l'historique des livraisons pour créer une séquence linéaire plus propre.

Puis-je annuler un commit git ?

Oui ! Pour annuler la dernière livraison mais conserver les modifications dans la zone de transit :

git reset --soft HEAD~1

Pour annuler la dernière livraison et supprimer les modifications de la phase d'essai :

git reset --mixed HEAD~1

Pour rejeter complètement les changements :

git reset --hard HEAD~1

Comment vérifier sur quelle branche je me trouve actuellement ?

Exécutez :

git branch --show-current

Ou simplement :

git status

Comment annuler les modifications apportées à un seul fichier ?

Pour ignorer les modifications non gérées d'un fichier :

git checkout -- filename

Pour ramener un fichier à son dernier état de livraison :

git restore filename

Comment lister toutes les branches distantes d'un dépôt Git ?

Utiliser :

git branch -r

Comment forcer une branche à être poussée dans Git ?

Soyez prudent lorsque vous forcez une poussée, car elle écrase les modifications effectuées à distance :

git push --force origin branch-name

Comment afficher un historique graphique de mes modifications Git ?

Si vous souhaitez obtenir une visualisation graphique de l'historique de vos livraisons :

git log --oneline --graph --all --decorate

Srujana Maddula's photo
Author
Srujana Maddula
LinkedIn

Srujana est rédactrice technique indépendante et titulaire d'un diplôme de quatre ans en informatique. Écrire sur divers sujets, notamment la science des données, l'informatique en nuage, le développement, la programmation, la sécurité et bien d'autres encore, est pour elle une évidence. Elle aime la littérature classique et la découverte de nouvelles destinations.

Sujets

Apprenez-en plus sur Git avec ces cours !

Certification disponible

cours

Introduction à Git

2 hr
15.2K
Découvrez les principes fondamentaux de Git pour le contrôle des versions dans vos projets de logiciels et de données.
Afficher les détailsRight Arrow
Commencer le cours
Voir plusRight Arrow
Apparenté

blog

Les 20 meilleures questions d'entretien pour les flocons de neige, à tous les niveaux

Vous êtes actuellement à la recherche d'un emploi qui utilise Snowflake ? Préparez-vous à répondre à ces 20 questions d'entretien sur le flocon de neige pour décrocher le poste !
Nisha Arya Ahmed's photo

Nisha Arya Ahmed

20 min

blog

Q2 2023 DataCamp Donates Digest

DataCamp Donates a offert plus de 20k bourses d'études à nos partenaires à but non lucratif au deuxième trimestre 2023. Découvrez comment des apprenants défavorisés et assidus ont transformé ces opportunités en réussites professionnelles qui ont changé leur vie.
Nathaniel Taylor-Leach's photo

Nathaniel Taylor-Leach

blog

2022-2023 Rapport annuel DataCamp Classrooms

À l'aube de la nouvelle année scolaire, DataCamp Classrooms est plus motivé que jamais pour démocratiser l'apprentissage des données, avec plus de 7 650 nouveaux Classrooms ajoutés au cours des 12 derniers mois.
Nathaniel Taylor-Leach's photo

Nathaniel Taylor-Leach

8 min

blog

Célébration de Saghar Hazinyar : Une boursière de DataCamp Donates et une diplômée de Code to Inspire

Découvrez le parcours inspirant de Saghar Hazinyar, diplômée de Code to Inspire, qui a surmonté les défis en Afghanistan et s'est épanouie grâce à une bourse de DataCamp Donates.
Fereshteh Forough's photo

Fereshteh Forough

4 min

blog

Nous avons fait don de bourses DataCamp Premium à un million de personnes, et ce n'est pas fini.

Réparties entre nos deux programmes d'impact social, DataCamp Classrooms et #DCDonates, les bourses offrent un accès illimité à tout ce que DataCamp Premium a à offrir.
Nathaniel Taylor-Leach's photo

Nathaniel Taylor-Leach

Voir plusVoir plus