Aide-mémoire sur les commandes Git : Les commandes que vous utilisez réellement, avec des exemples
Une référence Git pratique regroupée en fonction de ce que vous essayez de faire, depuis votre premier commit jusqu’à l’annulation d’une erreur. Gardez-le ouvert pendant que vous travaillez et utilisez le guide d’annulation avant de tenter quelque chose de risqué.
- Une modification passe par trois zones : répertoire de travail, zone de transit et référentiel.
git statusest la commande la plus sûre dont vous disposez, alors exécutez-la constamment.- Utilisez
git revertpour annuler les validations partagées et conservezgit reset --hardpour le travail local dont vous êtes sûr. git reflogpeut généralement sauver les commits que vous pensiez perdus.
Personne ne se souvient de chaque commande Git et vous n’en avez pas besoin. Cette aide-mémoire sur les commandes Git se concentre sur le petit ensemble qui couvre presque tout le travail quotidien, regroupé selon le travail que vous essayez d’effectuer.
Nous avons testé les commandes locales dans un référentiel de démonstration jetable à l’aide de Git pour Windows, et le résultat affiché provient de cette exécution, les avertissements de fin de ligne étant supprimés. Vos hachages de validation seront différents. Les commandes distantes nécessitent un serveur, nous ne les avons donc pas exécutées. Vous débutez dans le contrôle de version ? Commencez par notre Tutoriel Git pour débutants.
Comment pense Git : trois domaines
La plupart des confusions disparaissent une fois que vous savez où se situe le changement :
| Zone | Ce qu’il contient | Déplacé là-bas par |
|---|---|---|
| Répertoire de travail | Vos fichiers au fur et à mesure que vous les modifiez | Édition |
| Zone de transit (index) | Modifications sélectionnées pour le prochain commit | git ajouter |
| Dépôt local | Votre historique de validation enregistré | git commit |
| Dépôt distant | La copie partagée, comme sur GitHub | git pousser |
Configurer et démarrer un projet
| Commande | Ce que ça fait |
|---|---|
git config --global user.name "Asha" |
Définit votre nom sur les commits |
git config --global user.email "a@b.com" |
Définit votre e-mail sur les commits |
git config --global init.defaultBranch principal |
Nomme de nouvelles branches par défaut main |
git init |
Crée un référentiel dans le dossier actuel |
git clone <url> |
Télécharge un référentiel existant |
git config --liste |
Affiche vos paramètres actuels |
Enregistrez votre travail
| Commande | Ce que ça fait |
|---|---|
statut git |
Montre ce qui a changé |
git ajouter fichier.txt |
Étapes un fichier |
git ajouter . |
Organise toutes les modifications dans ce dossier |
git ajouter -p |
Organise les parties sélectionnées d’un fichier |
git diff |
Affiche les modifications non planifiées |
git diff --staged |
Montre ce qui sera commis |
git commit -m "Message" |
Enregistre les modifications par étapes en tant que validation |
git commit -am "Message" |
Organise les fichiers suivis et les valide |
Voici comment la vue d’état courte change à mesure qu’un nouveau fichier avance :
$ echo "hello" > app.txt
$ git status --short
?? app.txt
$ git add app.txt
$ git status --short
A app.txt
$ git commit -m "Add app file"
?? signifie non suivi et A signifie ajouté à la préparation. Dans le format à deux colonnes, la colonne de gauche est la zone de transit et la colonne de droite est votre répertoire de travail. Notez que git commit -am ignore les nouveaux fichiers, vous devez donc d’abord les ajouter explicitement.
Succursales
| Commande | Ce que ça fait |
|---|---|
branche git |
Répertorie les succursales locales |
branche git -a |
Inclut les succursales distantes |
fonctionnalité/connexion du commutateur git |
Déménage dans une succursale |
git switch -c fonctionnalité/connexion |
Crée une branche et s’y déplace |
fonctionnalité de fusion git/connexion |
Fusionne cette branche avec la branche actuelle |
git rebase principal |
Rejoue vos commits au-dessus de main |
git branch -d fonctionnalité/connexion |
Supprime une branche fusionnée |
git branch -D fonctionnalité/connexion |
Forcer la suppression d’une branche non fusionnée |
Voici une petite branche de fonctionnalités du début à la fin :
$ git switch -c feature/login
$ echo "login" >> app.txt
$ git commit -am "Add login"
$ git switch main
$ git merge --no-edit feature/login
$ git log --oneline --graph
* d0450b6 Add login
* 676b684 Add app file
$ git branch -d feature/login
Deleted branch feature/login (was d0450b6).
L’historique est une ligne droite car main n’avait pas bougé, donc Git a effectué une fusion rapide. Vous verrez toujours git checkout dans les anciens guides. Cela fonctionne, mais les commandes les plus récentes switch et restore divisent ses nombreuses tâches en tâches plus claires. Pour choisir entre fusionner et rebaser, lisez Git merge vs rebase.
Travailler avec des télécommandes
| Commande | Ce que ça fait |
|---|---|
git distant -v |
Répertorie les télécommandes et leurs URL |
git distant ajouter l'origine <url> |
Connecte une télécommande |
git récupérer |
Les téléchargements changent sans fusionner |
git pull |
Récupère, puis s’intègre dans votre branche |
git pousser |
Télécharge vos commits |
git push -u fonctionnalité/connexion d'origine |
Pousse une nouvelle branche et la suit |
git push origin --delete fonctionnalité/connexion |
Supprime une branche distante |
git push --force-avec-bail |
La force pousse, mais seulement si personne d’autre n’a poussé |
fetch est toujours sûr, car il ne modifie jamais vos fichiers. Si vous devez écraser une branche après un rebase, préférez --force-with-lease à plain --force, car il refuse d’effacer les nouveaux commits d’un collègue.
Cachette : mettez le travail de côté
Stash est utile lorsque vous devez changer de tâche mais que vous n’êtes pas prêt à vous engager :
$ echo "wip" >> app.txt
$ git stash
$ git status --short
# clean, the change is put away
$ git stash pop
$ git status --short
M app.txt
| Commande | Ce que ça fait |
|---|---|
git cachette |
Enregistre les modifications et nettoie votre répertoire de travail |
git cachette -u |
Inclut les fichiers non suivis |
liste de cachette git |
Affiche les réserves enregistrées |
git cachette pop |
Restaure la dernière cachette et la supprime |
git stash appliquer |
Le restaure mais le garde enregistré |
Afficher l’historique
| Commande | Ce que ça fait |
|---|---|
journal git --oneline |
Affiche une ligne par commit |
git journal --oneline --graph --all |
Dessine toutes les branches |
git log -p fichier.txt |
Affiche les modifications d’un fichier au fil du temps |
git show <hachage> |
Montre un commit en détail |
git blâme fichier.txt |
Montre qui a modifié chaque ligne pour la dernière fois |
git reflog |
Présent partout où HEAD a été |
git bissectrice |
Binaire recherche le commit qui a ajouté un bug |
Annuler les erreurs : “Je veux…”
C’est la partie que la plupart des gens recherchent. Trouvez votre situation :
| Situation | Commande |
|---|---|
| Supprimer les modifications non préparées dans un fichier | git restaurer le fichier.txt |
| Annuler la mise en scène d’un fichier mais conserver les modifications | git restaurer --staged fichier.txt |
| Corriger le message ou les fichiers du dernier commit | git commit --amend |
| Annuler le dernier commit, en gardant les modifications par étapes | git réinitialiser --soft HEAD~1 |
| Annuler le dernier commit, en conservant les modifications sans mise en scène | git réinitialiser HEAD~1 |
| Annuler un commit poussé en toute sécurité | git revert <hachage> |
| Jetez tous les changements locaux | git réinitialiser --hard |
| Supprimer les fichiers non suivis | git clean -fd (aperçu avec -n) |
| Récupérer un commit “perdu” | git reflog, puis git branch rescue <hash> |
Astuce : Avant toute chose risquée, exécutez git branch backup. Cela ne coûte rien et vous donne une étiquette sur laquelle revenir. git reset --hard et git clean peuvent détruire définitivement le travail non validé, que même reflog ne peut pas récupérer.
Réinitialiser, annuler ou restaurer
Ces trois noms prêtent à confusion, mais ils font des choses très différentes :
| Commande | Agit sur | Changer l’histoire? | En sécurité sur les branches partagées ? |
|---|---|---|---|
restauration git |
Fichiers | Non | Oui, mais il ignore les modifications locales |
git revenir |
Un commit, en ajoutant son contraire | S’y ajoute | Oui |
git réinitialiser |
Le pointeur de branche | Le réécrit | Non |
Dans notre démo, nous avons commis une mauvaise ligne et l’avons annulée. Le fichier est revenu à son contenu antérieur, tandis que l’erreur est restée visible dans le journal en tant qu’historique :
$ echo "oops" >> app.txt
$ git commit -am "Bad change"
$ git revert --no-edit HEAD
$ cat app.txt
hello
login
Ensuite, git reset --soft HEAD~1 a supprimé ce dernier commit mais a conservé ses modifications par étapes, ce que git status --short a montré comme M app.txt.
Balises
| Commande | Ce que ça fait |
|---|---|
balise git |
Listes de balises |
balise git v1.0 |
Crée une balise légère |
git tag -a v1.0 -m "Version" |
Crée une balise annotée, idéale pour les versions |
git push origine v1.0 |
Pousse une balise (les balises ne poussent pas par défaut) |
Les balises déclenchent souvent des pipelines de publication, comme l’explique notre guide GitHub Actions CI/CD.
Un flux de travail quotidien simple
git switch main
git pull
git switch -c feature/search
# edit files
git status
git add -p
git commit -m "Add search by product name"
git push -u origin feature/search
# open a pull request, get a review, then merge
Écrivez des messages de validation qui expliquent le changement de l’impératif, comme « Corriger la redirection de connexion ». Vous vous remercierez en lisant le journal dans six mois.
Erreurs courantes
- Commission de secrets. La suppression d’un fichier lors d’une validation ultérieure ne le supprime pas de l’historique. Faites pivoter le secret immédiatement et utilisez
.gitignore. - Réécriture de l’historique partagé. Ne réinitialisez pas ou ne rebasez pas les commits que d’autres ont déjà extraits.
- Utiliser
git add .aveuglément. Vérifiez d’abordgit status, afin que les fichiers de construction et les journaux restent à l’écart. - Utiliser simple
--force. Préférer--force-with-lease. - Faire d’énormes commits. Les petits commits sont plus faciles à examiner, à annuler et à diviser en deux.
Pour conclure
Apprenez les trois domaines et une douzaine de commandes, et Git cesse de faire peur. Gardez la table d’annulation à portée de main et rappelez-vous que git status et git reflog sont votre filet de sécurité. Pour renforcer la confiance, créez un référentiel jetable, puis cassez-le et réparez-le délibérément, car c’est l’endroit le moins cher pour commettre des erreurs.
Questions fréquentes
Quelles sont les commandes Git les plus utilisées ?
L’ensemble quotidien est git status, add, commit, push, pull, switch, branch, merge et log. Ces quelques commandes couvrent la majeure partie d’une journée de travail typique.
Comment annuler mon dernier commit dans Git ?
S’il est local, utilisez git reset –soft HEAD~1 pour conserver les modifications par étapes. Si vous l’avez déjà poussé, utilisez git revert pour que l’historique reste intact pour les autres.
Quelle est la différence entre git fetch et git pull ?
git fetch télécharge uniquement les nouvelles données et laisse vos fichiers tranquilles. git pull récupère puis fusionne ou rebase ces modifications dans votre branche actuelle.
Quelle est la différence entre git reset et git revert ?
git reset déplace le pointeur de branche et peut réécrire l’historique. git revert ajoute un nouveau commit qui annule un précédent, ce qui le rend sécurisé sur les branches partagées.
Puis-je récupérer une branche supprimée dans Git ?
Habituellement, oui. Trouvez son dernier commit avec git reflog, puis recréez la branche avec le nom de la branche git suivi du hachage, à condition que Git ne l’ait pas encore nettoyée.
Continuez à apprendre
Besoin d’aide pour les tests, WordPress ou le référencement ?
Nous aidons les équipes à proposer de meilleurs logiciels et à développer leurs sites. Dites-nous sur quoi vous travaillez et nous vous proposerons une prochaine étape claire.
Plus de guides sur tests, IA et développement moderne
Vous avez apprécié cet article ? Choisissez un sujet et accédez directement à nos nouveaux didacticiels.
Les hallucinations de l'IA expliquées : pourquoi les modèles de langage inventent les choses et comment les réduire
Les hallucinations de l'IA ont expliqué : ce qu'elles sont, pourquoi les modèles de langage les produisent, les types courants, comment les réduire …
Lire l'article →DevOpsVariables d'environnement expliquées : fichiers .env, secrets et configuration correctement effectués
Variables d'environnement expliquées avec des exemples Python que nous avons exécutés : lecture et définition, pourquoi chaque valeur est une chaîne…
Lire l'article →Développement logicielLimitation du débit de l'API expliquée : algorithmes, en-têtes et gestion des erreurs 429
Limitation du débit de l'API expliquée avec une simulation que nous avons exécutée : compartiment de jetons, fenêtre fixe, fenêtre glissante, 429 ré…
Lire l'article →Automatisation des testsSe moquer en Python : unittest.mock, patch et les erreurs qui font mentir les tests
Moquerie en Python avec unittest.mock, testée : Mock et return_value, side_effect, correctifs où un nom est utilisé, spec et autospec, dates moqueus…
Lire l'article →Tests logicielsCouverture du code expliquée : couverture des lignes par rapport aux branches et ce que signifie réellement 100 %
Couverture du code expliquée avec une véritable exécution de cover.py : couverture des lignes, des branches et des conditions, lecture d'un rapport,…
Lire l'article →Bases de données et SQLDELETE vs TRUNCATE vs DROP dans SQL : différences, restauration et quand les utiliser
DELETE vs TRUNCATE vs DROP expliqué avec SQL testé : ce que chacun supprime, restauration, déclencheurs, réinitialisation d'identité, vitesse et en …
Lire l'article →Bases de données et SQLVues SQL expliquées : créez, utilisez et évitez les pièges, avec des exemples
Vues SQL expliquées avec les requêtes que nous avons exécutées : création d'une vue, résultats en direct, masquage des colonnes, performances, vues …
Lire l'article →Développement logicielInterface TypeScript vs Type : différences réelles, testées avec le compilateur
Interface TypeScript vs type, vérifiée avec le vrai compilateur : ce que les deux peuvent faire, ce qu'un seul peut faire, la fusion des déclaration…
Lire l'article →Développement logicielPython *args et **kwargs expliqués : fonctions flexibles avec des exemples clairs
Python *args et **kwargs expliqués avec le code que nous avons exécuté : emballage et déballage, ordre des paramètres, arguments de mot-clé uniqueme…
Lire l'article →Développement logicielFonctions Python Lambda : syntaxe, utilisations réelles et quand ne pas les utiliser
Fonctions Python lambda expliquées avec le code que nous avons exécuté : syntaxe, tri avec clé, carte et filtre, fermetures, piège de liaison tardiv…
Lire l'article →Intelligence artificielleQue sont les agents IA ? Comment ils fonctionnent, avec une simple boucle d'agent que vous pouvez exécuter
Que sont les agents IA ? Un guide simple sur la boucle d'agent, les outils, la mémoire et les garde-fous, avec une petite boucle Python que nous avo…
Lire l'article →DevOpsSurveillance vs observabilité : la vraie différence, avec les journaux, les métriques et les traces
Surveillance et observabilité expliquées : échecs connus et inconnus, journaux, métriques et traces, présentation pas à pas des incidents de paiemen…
Lire l'article →DevOpsVolumes Docker vs montages Bind : conserver les données du conteneur de la bonne manière
Volumes Docker et montages de liaison expliqués : pourquoi les données du conteneur disparaissent, volumes nommés, montages de liaison, tmpfs, exemp…
Lire l'article →Automatisation des testsTDD vs BDD : principales différences, une fonctionnalité conçue dans les deux sens et quand les utiliser
TDD vs BDD expliqué avec une fonctionnalité de remise construite dans les deux sens : refactor rouge-vert avec le code que nous avons exécuté, scéna…
Lire l'article →Tests logicielsTests d'acceptation utilisateur (UAT) : processus, liste de contrôle et exemples réels
Les tests d'acceptation des utilisateurs sont expliqués : qui les exécute, en quoi ils diffèrent du contrôle qualité, un processus en sept étapes, u…
Lire l'article →Bases de données et SQLExplication des valeurs SQL NULL : IS NULL, COALESCE, NULLIF et les pièges à éviter
Les valeurs SQL NULL expliquées avec les requêtes que nous avons exécutées : logique à trois valeurs, IS NULL, COALESCE, NULLIF, comment les agrégat…
Lire l'article →Bases de données et SQLInstruction SQL CASE WHEN : syntaxe, exemples réels et erreurs courantes
SQL CASE WHEN expliqué avec les requêtes que nous avons exécutées : formulaires simples et recherchés, ordre des conditions, pivots avec SUM, astuce…
Lire l'article →Développement logicielQu'est-ce que JWT ? Les jetons Web JSON expliqués avec un exemple fonctionnel
Qu’est-ce que JWT ? JSON Web Tokens expliqué : les trois parties, un jeton construit et falsifié dans le code que nous avons exécuté, JWT vs session…
Lire l'article →Développement logicielBoucle d'événements JavaScript expliquée : pile d'appels, microtâches et minuteries avec des exemples
La boucle d'événements JavaScript expliquée avec le code que nous avons exécuté : pile d'appels, files d'attente de tâches et de microtâches, pourqu…
Lire l'article →Développement logicielGénérateurs Python et rendement expliqués : économisez de la mémoire avec des exemples réels
Les générateurs Python et le rendement expliqués avec le code que nous avons exécuté : comment ils s'arrêtent et reprennent, les économies de mémoir…
Lire l'article →Intelligence artificielleQue sont les intégrations ? Vecteurs et similarité cosinus expliqués simplement
Que sont les intégrations ? Un guide en langage simple sur les vecteurs, la similarité cosinus et la recherche sémantique, avec un petit exemple que…
Lire l'article →DevOpsDéploiement Bleu-Vert vs Canary : différences, compromis et comment choisir
Explication du déploiement bleu-vert ou canari : comment chacun fonctionne, coût, risque et restauration, regroupement d'utilisateurs stable que nou…
Lire l'article →Automatisation des testsTests instables : quelles sont leurs causes et comment les corriger définitivement
Des tests irréguliers expliqués avec des démos que nous avons exécutées : les principales causes, comment en confirmer et en diagnostiquer une, les …
Lire l'article →Tests logicielsTests de charge vs tests de contrainte : différences, métriques et exemples k6
Explication des tests de charge et des tests de stress : ce que chacun prouve, les tests de pointe et de trempage, les métriques qui comptent, pourq…
Lire l'article →Tests logicielsScénario de test et scénario de test : principales différences, exemples et quand les utiliser
Scénario de test et scénario de test expliqués : des définitions claires, un tableau côte à côte, une fonctionnalité de réinitialisation de mot de p…
Lire l'article →Bases de données et SQLOptimisation des requêtes SQL : lire les plans d'exécution et corriger les requêtes lentes, avec des délais
Optimisation des requêtes SQL testée sur un million de lignes : lire les plans d'exécution, ajouter les bons index, corriger les filtres non Sargabl…
Lire l'article →Bases de données et SQLSQL UNION vs UNION ALL : différences, exemples et performances testées
SQL UNION vs UNION ALL expliqué avec les requêtes que nous avons exécutées : des doublons, les règles suivent toutes les deux, un véritable bug de d…
Lire l'article →Développement logicielTutoriel API JavaScript Fetch : GET, POST, gestion des erreurs et délais d'attente
Un didacticiel de l'API JavaScript Fetch testé sur un serveur local : GET et POST, pourquoi 404 ne lance pas, un assistant réutilisable, des chaînes…
Lire l'article →Développement logicielGestion des fichiers Python : lecture, écriture, CSV, JSON et pathlib avec exemples
Gestion des fichiers Python expliquée avec le code que nous avons exécuté : modes ouverts, avec lecture de fichiers volumineux, CSV, JSON, pathlib, …
Lire l'article →Développement logicielClasses et objets Python : didacticiel POO avec des exemples réels
Classes et objets Python expliqués avec le code que nous avons exécuté : __init__, méthodes, attributs de classe par rapport à l'instance, héritage,…
Lire l'article →Intelligence artificielleQu'est-ce qu'un grand modèle de langage ? Comment fonctionnent les LLM, expliqués sans battage médiatique
Qu’est-ce qu’un grand modèle de langage ? Les LLM expliqués en langage simple : jetons, intégrations, attention, formation, fenêtres de température …
Lire l'article →DevOpsCommandes Linux pour les débutants : le guide du terminal essentiel avec des exemples
Commandes Linux pour débutants, regroupées par tâche : navigation, fichiers, affichage des journaux, grep, tuyaux, autorisations, processus et archi…
Lire l'article →Automatisation des testsSelenium vs Playwright : principales différences, code comparé et lequel choisir
Comparatif Selenium vs Playwright : architecture, attente, support du navigateur et du langage, débogage, même test dans les deux outils, conseils d…
Lire l'article →Tests logicielsPartitionnement d'équivalence : technique de conception de tests expliquée avec des exemples concrets
Le partitionnement d'équivalence expliqué : comment trouver des partitions valides et invalides, des exemples concrets d'âges, de mots de passe et d…
Lire l'article →Tests logicielsGravité vs priorité dans les tests logiciels : différences, matrice et exemples réels
Explication de la gravité et de la priorité dans les tests logiciels : des définitions claires, une matrice à quatre voies avec des exemples, des éc…
Lire l'article →Bases de données et SQLTutoriel sur les sous-requêtes SQL : types, sous-requêtes corrélées et EXISTE avec des exemples
Un didacticiel sur les sous-requêtes SQL avec les requêtes que nous avons exécutées : les sous-requêtes scalaires, IN, FROM et SELECT, les sous-requ…
Lire l'article →Bases de données et SQLTransactions SQL et ACID expliquées : COMMIT, ROLLBACK et niveaux d'isolement
Transactions SQL et ACID expliquées avec un virement bancaire que nous avons effectué : COMMIT, ROLLBACK, points de sauvegarde, verrous, niveaux d'i…
Lire l'article →Développement logicielAide-mémoire sur les commandes Git : les commandes que vous utilisez réellement, avec des exemples
Une aide-mémoire sur les commandes Git regroupées par tâche : configuration, transfert, branches, télécommandes, cache, historique et annulation des…
Lire l'article →Développement logicielLes promesses JavaScript expliquées : alors, catch, Promise.all et les erreurs courantes
Les promesses JavaScript expliquées avec le code que nous avons exécuté : les états, les chaînes then et catch, la gestion des erreurs, Promise.all,…
Lire l'article →Développement logicielTutoriel du dictionnaire Python : méthodes, exemples et modèles courants
Un didacticiel de dictionnaire Python avec du code que nous avons exécuté : créer, lire et mettre à jour des dictés, des méthodes clés, des fusions,…
Lire l'article →Intelligence artificielleQu’est-ce que RAG ? La génération augmentée par récupération expliquée avec un exemple fonctionnel
Qu’est-ce que le RAG ? La génération augmentée par récupération expliquée étape par étape : indexation, segmentation, intégrations, récupération, un…
Lire l'article →DevOpsTutoriel Terraform pour les débutants : Infrastructure en tant que code du premier fichier aux modules
Un didacticiel Terraform pour les débutants : commencez sans compte cloud, apprenez l'initialisation, la planification et l'application, puis les va…
Lire l'article →DevOpsDocker vs Kubernetes : principales différences, comment ils fonctionnent ensemble et ce dont vous avez besoin
Docker vs Kubernetes expliqué : ce que chacun fait, la même application s'exécute avec les deux, Docker Compose et Swarm comparés, les dockershim ch…
Lire l'article →Automatisation des testsTutoriel Pytest pour les débutants : luminaires, paramétrage et exemples réels
Un tutoriel pytest pour les débutants avec des tests que nous avons exécutés sur pytest 9.2 : assertions, appareils, paramétrage, conftest, marqueur…
Lire l'article →Tests logicielsCycle de vie des tests logiciels (STLC) : 6 phases, critères d'entrée et de sortie, exemple
Le cycle de vie des tests logiciels expliqué : six phases STLC avec des critères d'entrée et de sortie, des livrables, un exemple de fonctionnalité …
Lire l'article →Développement logicielGit merge vs rebase : différences, exemples et quand utiliser chacun
Git merge vs rebase expliqué avec de vraies sorties de log, un tableau comparatif, la règle d'or du rebase et un flux de travail sûr pour les équipes.
Lire l'article →Développement logicielList comprehension Python : syntaxe, exemples et cas à éviter
La list comprehension Python expliquée : syntaxe, filtres, if-else, boucles imbriquées, temps mesurés et cas où une boucle for classique est préféra…
Lire l'article →Bases de données et SQLJointures SQL expliquées avec exemples (Inner, Left, Right, Full)
Comprenez les jointures SQL pas à pas avec des tables et requêtes d'exemple : INNER, LEFT, RIGHT, FULL, CROSS et SELF, plus erreurs courantes et con…
Lire l'article →