rebase en pratique$ git switch sauce
$ git rebase main â rejoue sauce au bout de main
Successfully rebased and updated refs/heads/sauce.
$ git switch main
$ git merge sauce â plus rien Ă rĂ©unir : fast-forward
Fast-forward
git add, puis git rebase --continue (pas commit) ; git rebase --abort remet tout comme avant ;merge garde l'histoire telle qu'elle s'est passée, rebase la rend lisible : les deux sont corrects ;git pull --rebase : fetch puis rebase sur origin/main, au lieu du merge de git pull. La rÚgle d'or : on ne rebase que des commits qui n'existent que chez vous. Pourquoi ? C'est la slide suivante.
AprĂšs un rebase, vos commits ont de nouveaux hashes : ce sont des copies. Si un collĂšgue avait dĂ©jĂ tirĂ© les anciens, il aurait deux versions des mĂȘmes commits, et son prochain pull les mĂ©langerait.
main, ou toute branche partagée : jamais de rebase ;git rebase --abort, ou git reflog pour retrouver l'état d'avant.En GIT2, nous avons mis la branche de PR à jour par git merge upstream/main. Beaucoup d'équipes préfÚrent le rebase, qui garde la PR en ligne droite au-dessus de main :
$ git fetch upstream
$ git rebase upstream/main â conflit ? corriger, git add, git rebase --continue
$ git push â refusĂ© : votre branche a Ă©tĂ© réécrite
$ git push --force-with-lease â Ă©crase votre branche sur le fork⊠si personne n'y a poussĂ© entre-temps
--force nu écrase sans regarder ; prenez l'habitude de --force-with-lease.Pour toute question, vous pouvez me contacter par email : raphael@imagine-app.fr.
reflogRetrouver un commit « perdu » ; à lire aprÚs GIT2
reflog : le filet de sécurité$ git reset --hard HEAD~2
HEAD is now at 12ed6ff Ajoute les garnitures des crĂȘpes
$ git reflog
12ed6ff HEAD@{0}: reset: moving to HEAD~2
dd98832 HEAD@{1}: commit (merge): Merge branch 'cuisson'
$ git reset --hard HEAD@{1} â il est revenu
HEAD et le garde des semaines, y compris vers des commits que git log ne montre plus ;restore, reset --hard sur des modifications en cours).Dans un dépÎt d'essai (pas dans un projet qui compte) :
git log --oneline : notez le hash du commit du haut ;git reset --hard HEAD~1 ; git log --oneline : il a disparu, et le fichier avec ;git reflog : retrouvez-le (ligne HEAD@{1}) ;git reset --hard HEAD@{1} ; git log --oneline : il est revenu ;git switch -c avant-reset HEAD@{2} : une branche posée sur un ancien état, pour le garder.Retenez bien : un commit n'est jamais perdu tant qu'il figure dans le reflog (30 à 90 jours). Ce qui se perd, c'est ce qui n'a jamais été commité.
Pour toute question, vous pouvez me contacter par email : raphael@imagine-app.fr.
Un seul commit (cherry-pick), ou deux projets sans ancĂȘtre commun ; Ă lire aprĂšs GIT2
cherry-pick Parfois, on ne veut pas toute la branche d'une collĂšgue, seulement un commit (un correctif, typiquement). Camille (git-carnet-camille) a corrigĂ© les crĂȘpes, mais son essai de gaufres n'est pas prĂȘt :
$ git remote add camille https://github.com/raphaelpra/git-carnet-camille.git
$ git fetch camille
$ git log --oneline main..camille/main
2a064e0 Essai de gaufres (en cours) â celui-ci, non merci
b6c47e3 Corrige le nombre d'Ćufs des crĂȘpes â celui-ci, oui
12ed6ff Ajoute les garnitures des crĂȘpes
$ git cherry-pick b6c47e3
[main 8c1d8fa] Corrige le nombre d'Ćufs des crĂȘpes
cherry-pick rejoue la modification d'un commit au bout de votre branche : c'est une copie, avec un nouveau hash (le vÎtre sera différent de 8c1d8fa) ;git add, git cherry-pick --continue (ou --abort) ;Vous voulez réunir deux dépÎts nés séparément (votre code et celui d'un binÎme, un prototype et le vrai projet) :
$ git fetch voisin
$ git merge voisin/main
fatal: refusing to merge unrelated histories
$ git merge voisin/main --allow-unrelated-histories
Git refuse par dĂ©faut, car c'est presque toujours une erreur (le README créé par GitHub de la recette GIT1). Avec l'option, il crĂ©e un merge commit qui a deux racines : les deux historiques sont conservĂ©s en entier. Les fichiers de mĂȘme nom entrent en conflit, comme d'habitude.
Camille tient de son cÎté un carnet de pùtisserie, né à part : https://github.com/raphaelpra/git-patisserie. Faisons-le entrer dans votre clone de git-carnet :
git remote add patisserie https://github.com/raphaelpra/git-patisserie.gitgit fetch patisserie, puis git branch -r et git remote -v ;git log --oneline --graph --all : combien d'arbres voyez-vous ? pourquoi ?git show patisserie/main:recettes/macarons.md : sa recette, sans quitter votre branche ;git switch -c fusion puis git merge patisserie/main : lisez le refus ; recommencez avec --allow-unrelated-histories ; conflit sur README.md : rĂ©solvez-le (gardez les deux titres), add, commit ;ls recettes/ : les crĂȘpes et les macarons ; puis rangez : git switch main, git branch -D fusion, git remote remove patisserie.Question : aprĂšs l'Ă©tape 6, les commits de Camille sont-ils encore dans votre .git ?
Pour toute question, vous pouvez me contacter par email : raphael@imagine-app.fr.
ghGitHub en ligne de commande ; Ă lire aprĂšs GIT2
gh, puis se connectergh est l'outil officiel de GitHub en ligne de commande ; il s'installe à part de git. Rien de ce qu'on fait en cours n'en a besoin, mais il simplifie l'authentification (surtout sur Mac) et évite des allers-retours sur le site.
| SystĂšme | Installation |
|---|---|
| Windows | winget install --id GitHub.cli dans un terminal, puis fermez et rouvrez Git Bash (sinon : l'installateur .msi sur https://cli.github.com) |
| macOS | brew install gh (il faut Homebrew ; sinon : le .pkg sur https://cli.github.com) |
| Linux | le paquet de votre distribution, cf. https://github.com/cli/cli#installation |
$ gh --version â vĂ©rifie l'installation
$ gh auth login â rĂ©pondez : GitHub.com, HTTPS, puis « Login with a web browser »
$ gh auth status â « Logged in to github.com account vous »
AprĂšs
gh auth login, git utilise gh pour s'authentifier en HTTPS : plus de mot de passe ni de jeton à gérer.
gh fait Ă la place du site$ gh repo fork raphaelpra/git-atelier-2026 --clone â fork + clone + remote upstream, en une commande
$ gh pr create --fill â ouvre la PR de la branche courante
$ gh pr list â les PR ouvertes du dĂ©pĂŽt
$ gh pr checkout 12 â rĂ©cupĂšre la branche de la PR n°12, pour la tester
$ gh pr view --web â ouvre la PR dans le navigateur
Tout ce que fait gh se fait aussi sur le site : c'est une question de confort. Les commandes git, elles, ne changent pas.
Pour toute question, vous pouvez me contacter par email : raphael@imagine-app.fr.