Premiers pas avec Git et GitHub
Versionner ton code, collaborer sur GitHub, ouvrir une pull request : les bases solides pour démarrer sereinement, sans accumuler de mauvais réflexes.
À la fin du cours, tu sais
- Installer et configurer Git en moins de 5 minutes
- Versionner un projet en local avec des commits propres
- Travailler avec des branches sans flipper
- Pousser ton code sur GitHub avec une authentification sécurisée
- Ouvrir une pull request et collaborer en équipe
Prérequis
- Être à l'aise avec un terminal
- Avoir un projet (même minimal) que tu peux versionner
Chapitre 1
Comprendre Git et GitHub
Avant de toucher au terminal, poser les bases. Git et GitHub sont deux outils différents, souvent confondus.
Git : le versionneur local
Git est un logiciel installé sur ta machine qui suit l'historique de tes fichiers. Il fonctionne sans internet. Chaque modification, chaque retour en arrière, chaque comparaison entre versions passe par Git.
GitHub : la plateforme de partage
GitHub est un service en ligne qui héberge des dépôts Git. C'est là que tu sauvegardes ton code, que tu collabores avec d'autres dev, que tu publies tes projets open source. Il y en a d'autres (GitLab, Bitbucket, Gitea), GitHub est le plus utilisé.
À retenir
Le vocabulaire de base
- Dépôt (repository, repo) : un projet versionné
- Commit : une photo de ton projet à un instant T, avec un message qui décrit le changement
- Branche (branch) : une ligne d'évolution indépendante du code
- Remote : un dépôt distant (sur GitHub par exemple), connecté à ton dépôt local
git --version
# git version 2.45.0 ou plus récentChapitre 2
Installer et configurer Git
Configuration à faire une fois pour toutes. Cinq minutes, et tu n'y reviens plus.
Installation
- macOS :
brew install git(recommandé), ou via les Xcode Command Line Tools - Windows : télécharge Git for Windows sur git-scm.com
- Linux : via le gestionnaire de paquets, ex
sudo apt install gitsur Ubuntu
Configurer ton identité
Chaque commit que tu fais est signé avec un nom et un email. À toi de les configurer une bonne fois pour toutes :
git config --global user.name "Prénom Nom"
git config --global user.email "ton.email@exemple.fr"
# Branche par défaut sur "main" pour tout nouveau projet
git config --global init.defaultBranch main
# Éditeur par défaut (VS Code dans cet exemple)
git config --global core.editor "code --wait"
# Vérifier la config
git config --listL'option --global
--global, la config s'applique à tous tes dépôts. Sans --global, elle ne vaut que pour le dépôt courant. Le 99 % du temps, tu veux --global.Chapitre 3
Ton premier dépôt local
Créer un projet versionné, ajouter des fichiers, faire ton premier commit. Le cycle de base.
Les trois zones de Git
- Working directory : ton dossier, où tu modifies les fichiers
- Staging area (index) : la zone où tu prépares ce qui ira dans le prochain commit
- Dépôt (repository) : l'historique des commits enregistrés
Le cycle de base : tu modifies → tu places dans le staging avec git add → tu enregistres avec git commit.
Les commandes essentielles
# Dans le dossier de ton projet
git init
# Voir l'état des fichiers en permanence
git status
# Ajouter un fichier au staging
git add README.md
# Tout ajouter (à utiliser avec un .gitignore propre)
git add .
# Enregistrer un commit avec un message clair
git commit -m "Init : structure du projet"
# Voir l'historique
git log --onelineLe .gitignore : ce que Git ne doit pas suivre
Certains fichiers ne doivent jamais être versionnés : dépendances installées (node_modules), secrets (.env), artefacts de build (dist, build). Crée un fichier .gitignore à la racine :
node_modules/
.env
.env.local
dist/
build/
.DS_Store
*.logLe piège du secret commité
.env avec une clé API par erreur, considère la clé comme compromise même si tu la supprimes dans un commit suivant. Git garde tout dans l'historique. Régénère-la immédiatement.Chapitre 4
Travailler avec les branches
Une branche, c'est une ligne d'évolution indépendante. Tu codes ta nouvelle feature sans casser ce qui marche déjà sur main.
Pourquoi des branches
- Isoler une nouvelle fonctionnalité du code stable
- Travailler à plusieurs sans s'écraser
- Pouvoir abandonner un essai sans bousiller
main - Préparer une release pendant que le dev continue ailleurs
Les commandes
# Créer une branche et basculer dessus
git switch -c feat/page-contact
# Lister les branches (l'actuelle est marquée *)
git branch
# Basculer sur une branche existante
git switch main
# Fusionner une branche dans la branche courante
git merge feat/page-contact
# Supprimer une branche fusionnée
git branch -d feat/page-contactConventions de nommage
feat/ pour une nouvelle feature, fix/ pour un bug, refactor/ pour une refonte, docs/ pour de la doc. Ça aide tout le monde à comprendre l'historique d'un coup d'œil.git switch vs git checkout
Les vieux tutos utilisent git checkout pour changer de branche. Depuis Git 2.23, la commande dédiée est git switch, plus claire. checkout reste pour restaurer des fichiers. Préfère switch pour les branches.
Chapitre 5
Se connecter à GitHub
Créer un dépôt distant, relier ton dépôt local, t'authentifier proprement. Une étape qui bloque souvent les débutant·es à cause de l'auth.
Créer un dépôt sur GitHub
Sur github.com, clique New repository. Donne-lui un nom, laisse-le vide (pas de README, pas de .gitignore) pour pouvoir y pousser ton dépôt local sans conflit.
Authentification : token ou clé SSH
Plus de mot de passe en HTTPS
Option recommandée : clé SSH
# Génère une clé SSH
ssh-keygen -t ed25519 -C "ton.email@exemple.fr"
# Affiche la clé publique pour la copier
cat ~/.ssh/id_ed25519.pubColle la clé publique sur GitHub : Settings → SSH and GPG keys → New SSH key. Ensuite, tu peux pousser sans jamais retaper de mot de passe.
Relier ton dépôt local
# Ajoute le remote (l'URL SSH du dépôt GitHub vide)
git remote add origin git@github.com:tonpseudo/mon-projet.git
# Pousse la branche main pour la première fois (-u : track)
git push -u origin mainPourquoi -u
-u (ou --set-upstream) lie ta branche locale à la branche distante. Après ça, un simple git push ou git pull sait où aller.Chapitre 6
Collaborer : push, pull, clone
Le cycle quotidien quand tu bosses à plusieurs : récupérer ce qui a bougé, coder, pousser, recommencer.
Cloner un dépôt existant
git clone git@github.com:equipe/projet.git
cd projetgit clone récupère le dépôt complet : tout l'historique, toutes les branches, configurées automatiquement comme remote origin.
Le cycle pull → code → push
# Avant de coder : récupérer les changements des autres
git pull
# Tu codes, tu fais tes commits
git add .
git commit -m "feat: ajout du formulaire de contact"
# Tu pousses tes commits sur GitHub
git pushToujours pull avant de pusher
git pull au début de chaque session de code.Gérer un conflit
Un conflit arrive quand deux personnes ont modifié les mêmes lignes du même fichier. Git ne sait pas choisir. Il te demande de trancher.
<<<<<<< HEAD
Texte de ta version locale
=======
Texte de la version distante
>>>>>>> origin/mainOuvre le fichier, choisis la bonne version (ou fais un mélange), supprime les marqueurs <<<, ===, >>>, puis git add + git commit.
Chapitre 7
Pull requests et revue de code
La pull request (PR) est le rituel central de la collaboration sur GitHub : tu proposes un changement, on en discute, on le valide, on le fusionne.
Le flux complet
- Tu crées une branche dédiée :
git switch -c fix/typo-readme - Tu codes, tu commits
- Tu pousses ta branche :
git push -u origin fix/typo-readme - Sur GitHub, tu ouvres une Pull request avec un titre clair et une description du changement
- Tes coéquipier·es relisent, commentent, demandent des ajustements
- Tu pousses des commits supplémentaires sur la branche, la PR se met à jour automatiquement
- Une fois approuvée, tu cliques Merge pull request sur GitHub
- Tu supprimes la branche fusionnée (GitHub propose le bouton)
Squash, merge, rebase : quel bouton ?
- Squash and merge (recommandé pour les équipes) : tous tes commits deviennent un seul commit propre sur
main - Merge commit : garde tous tes commits + un commit de merge en plus
- Rebase and merge : rejoue tes commits sur
mainsans commit de merge
Squash par défaut
main propre, un commit par feature. Les détails de tes 12 commits intermédiaires (oups typo, fix lint...) restent dans la PR mais ne polluent pas l'historique principal.Chapitre 8
Bonnes pratiques et dépannage
Adopter de bons réflexes dès le départ t'évite 80 % des problèmes Git classiques.
Des commits propres
- Un commit = une intention claire (pas 12 sujets dans le même commit)
- Message à l'impératif, court mais explicite :
fix: gestion du null sur le formulaire de login - Commits fréquents : plus c'est petit, plus c'est facile à relire et à annuler
- Conventions Conventional Commits (
feat:,fix:,chore:...) facilitent les releases automatiques
Annuler proprement
# Annuler des modifs non commitées sur un fichier
git restore fichier.md
# Annuler un commit déjà poussé sur la branche partagée
# (crée un nouveau commit qui annule le précédent)
git revert <hash-du-commit>
# Modifier le dernier commit (avant push uniquement)
git commit --amendgit reset, à manier avec prudence
git reset --hard détruit définitivement les modifications. Tant que tu n'as pas pushé, ce n'est pas grave. Sur une branche partagée déjà poussée, n'utilise jamais reset --hard, utilise git revert à la place.Lire l'historique
# Historique condensé avec graphe des branches
git log --oneline --graph --all
# Voir les changements d'un commit
git show <hash>
# Voir qui a modifié quoi sur un fichier
git blame fichier.mdLe réflexe ultime
git status est ton meilleur ami. À chaque doute, lance-le. Il te dit où tu en es, ce qui est en staging, ce qui est modifié, et te suggère même les commandes pour avancer.🛠️ Exercice optionnel
Publier ton premier projet sur GitHub
Tu vas créer un mini-site portfolio (un seul fichier HTML suffit), le versionner localement, puis le publier sur GitHub via une pull request. C'est le rite de passage de tout·e dev.
Ta mission
- Crée un dossier
mon-portfolio, initialise un dépôt Git avecmaincomme branche par défaut, configure ton identité Git si pas déjà fait. - Ajoute un
README.mdet unindex.htmlminimal, fais un premier commit "Init : structure du projet". - Crée une branche
feat/section-bio, ajoute une section bio dansindex.html, commit avec un message clair. - Reviens sur
main, fusionnefeat/section-bio, supprime la branche locale. - Crée un dépôt vide sur GitHub, ajoute-le en remote, pousse
mainavec-u. - Crée une branche
feat/section-projets, code-la, pousse-la, ouvre une pull request sur GitHub, fusionne-la depuis l'interface. - Vérifie en local :
git pulldoit récupérer le commit de merge créé sur GitHub.
Tu bloques ? Des indices, à dévoiler quand tu en as besoin.
Indice 1
Indice masqué.
Indice 2
Indice masqué.
Indice 3
Indice masqué.
✅ QCM de fin de cours
Teste tes acquis
10 questions, plusieurs réponses parfois possibles. Coche tout ce qui te semble juste, puis valide pour voir ton score et les explications.
- 1
Quelle est la différence entre Git et GitHub ?
- 2
Quelle commande crée un nouveau dépôt Git dans le dossier courant ?
- 3
Comment configurer ton nom globalement pour tous tes commits ?
- 4
À quoi sert
git add? - 5
Quelle est la branche par défaut recommandée aujourd'hui pour un nouveau projet ?
- 6
Quelle commande récupère un dépôt distant et son historique en local ?
- 7
Comment t'authentifier sur GitHub pour pousser en HTTPS aujourd'hui ?
- 8
Que fait
git pull? - 9
Quel est l'intérêt principal d'une pull request ?
- 10
Tu as poussé un commit avec un bug sur la branche partagée. Comment annuler proprement ?
Tu peux laisser des questions sans réponse, elles compteront comme fausses.
Tu veux ce cours pour ton équipe ?
Je peux adapter et animer ce cours pour tes formateur·ices ou tes apprenant·es, en présentiel ou en distanciel. Parlons-en pendant l'audit gratuit.
Réserver un audit gratuit →