Formation Git Avancé : Internals, réécriture d'historique et dépôts complexes.
Score de satisfaction : 4.48/5
Durée :
2 jours
Distanciel et 16 villes en France
numero vert : 0805 950 800 (service et appel gratuits)
à partir de
1600 €HT
90% d'avis positifs* participants

Référence :
SF34631
Durée :
2 jours

En présentiel ou distanciel


  • 14 heures de formation
  • Exercices pratiques
  • Prise en charge OPCO possible
Vous souhaitez personnaliser cette formation ?
  • En entreprise ou à distance
  • Cadrage pédagogique gratuit
  • Programme de formation sur mesure
  • Formateur expert dédié
  • Prise en charge OPCO possible

Formation Git Avancé : Internals, réécriture d'historique et dépôts complexes.

Allez sous le capot de Git pour maîtriser les scénarios que le quotidien ne suffit pas à enseigner : réécriture d'historique, conflits récurrents, gros dépôts et dépendances inter-projets.

Une fois passées les commandes du quotidien et les workflows d'équipe, Git réserve un second territoire, celui des scénarios complexes : un secret commit par erreur qu'il faut purger de tout l'histoirique, un conflit qui revient à chaque rebase, un dépôt monolithique devenu trop lourd à cloner, une dépendance qu'on hésite à figer en sous-module ou en subtree... Cette formation de deux jours vous fait passer du statut d'utilisateur opérationnel à celui de référent Git capable d'arbitrer sereinement ces situations. Vous explorez le modèle objet et la plomberie en profondeur (`cat-file`, `hash-object`, refspecs, garbage collection), apprenez à réécrire l'historique sans crainte (`reflog`, `rebase --autosquash`, `git filter-repo`), exploitez `rerere` pour automatiser les résolutions répétitives, et configurez Git au plus près de vos besoins via `.gitattributes` et `git notes`. Côté organisation, vous comparez sous-modules, subtrees et `git worktree` pour orchestrer plusieurs dépôts, et mettez en place Git LFS, `sparse-checkout` et `partial clone` pour traiter les dépôts volumineux. À l'issue de la formation, vous êtes opérationnel sur les situations qui font la différence entre un utilisateur de Git et un référent Git dans son équipe.

Objectifs pédagogiques.

1Expliquer le modèle objet et les internals de Git pour diagnostiquer le comportement de l'outil sans recourir à la magie

2Manipuler et réécrire l'historique en profondeur pour récupérer une situation ou nettoyer un dépôt

3Résoudre les conflits complexes en exploitant les stratégies de merge avancées et `git rerere` pour automatiser les résolutions répétitives

4Configurer le comportement de Git au niveau fichier avec `.gitattributes` et annoter l'historique avec `git notes`

5Mettre en œuvre un workflow de patches pour collaborer hors plateforme

6Orchestrer plusieurs arbres ou dépôts avec `git worktree`, sous-modules et subtrees, et choisir l'approche adaptée à chaque contexte

7Gérer des dépôts volumineux ou à historique long avec Git LFS, `sparse-checkout` et `partial clone`

Prérequis : - Maîtrise des commandes Git du quotidien : `add`, `commit`, `push`, `pull`, `fetch`, `stash`, `cherry-pick`- Pratique régulière du travail en branches : création, switch, merge, rebase interactif (squash/fixup), résolution de conflits- Expérience du travail collaboratif distant : pull/merge request, revue de code, workflow d'équipe- Avoir suivi la formation Sparks Git de niveau 1 ou disposer d'une expérience Git équivalente en production
Partagez cette formation

Programme de formation Git Avancé : Internals, réécriture d'historique et dépôts complexes.

Modèle objet et internals de Git

– Anatomie du dossier `.git` : objects, refs, HEAD, index, packfiles — où vit réellement le code
– Les quatre objets de Git : blob, tree, commit, tag — au-delà du survol, lecture brute avec les commandes de plomberie
– Commandes plumbing vs porcelain : `cat-file`, `hash-object`, `ls-tree`, `rev-parse` — diagnostiquer sans magie
– Refs et refspecs : branches locales, branches de suivi, tags, refs distantes — lecture et manipulation fine
– Packfiles et garbage collection : `gc`, `prune`, `fsck` — entretenir un dépôt et comprendre la compression
– Reachability et orphan commits : ce que Git « voit » et ce qu’il efface — fondement de la récupération d’historique

**Exemples d’activités pratiques :**

– Reconstitution manuelle d’un commit à partir de blobs et trees avec les commandes plumbing
– Manipulation d’un refspec personnalisé pour ne récupérer qu’un sous-ensemble de branches distantes
– Diagnostic d’un dépôt corrompu et exécution d’un `gc` agressif

Réécriture et maintenance avancée de l’historique

– reflog` en profondeur : journal local de toutes les manipulations de refs — le filet de sécurité du quotidien
– Récupération d’une branche supprimée ou d’un commit perdu : reconstruction via le reflog et les commits orphelins
– `rebase –autosquash` et `commit –fixup` : workflow propre pour rectifier au fil de l’eau sans rebase manuel
– `rebase –onto` : déplacer une série de commits d’une base à une autre — cas du backport ou du rebranchage
– `git filter-repo` : outil moderne de réécriture d’historique en profondeur (purge de fichier, scission de dépôt, refonte d’identités) — positionné comme remplaçant de `filter-branch` (mention historique uniquement)
– `git bisect` : recherche dichotomique d’une régression dans un historique long — automatisable avec `bisect run`
– Range-diff et `cherry-pick -x` : comparer deux séries de commits, tracer l’origine d’un cherry-pick

**Exemples d’activités pratiques :**

– Récupération d’une branche supprimée par erreur via le reflog
– Purge définitive d’un fichier de configuration contenant un secret commit accidentellement, sur tout l’historique
– Chasse automatisée à une régression avec `git bisect run` couplé à un script de test
– Scission d’un sous-dossier d’un dépôt en un dépôt indépendant avec `git filter-repo`

Conflits complexes et stratégies de fusion

– Anatomie d’une fusion : fast-forward, three-way merge, base commune — mécanique sous les marqueurs de conflit
– Stratégies de merge : `recursive`, `ort` (par défaut depuis Git 2.34), `ours`, `theirs` — quand utiliser laquelle
– Options de stratégie : `-X ignore-space-change`, `-X patience`, `-X diff-algorithm` — désamorcer les conflits artificiels
– `git rerere` (reuse recorded resolution) : enregistrer une résolution de conflit pour la rejouer automatiquement lors d’un rebase ou d’une re-fusion
– Annulation propre d’un merge déjà poussé : `revert -m`, ré-application ultérieure et pièges associés
– Diagnostic d’un conflit : `git log –merge`, `git diff –base`, outils de mergetool — comprendre l’origine du désaccord

**Exemples d’activités pratiques :**

– Résolution d’un conflit récurrent sur une branche longue avec activation de `rerere`
– Comparaison des résultats d’un même merge avec stratégies et options différentes
– Annulation d’un merge poussé sur main, puis ré-application contrôlée du contenu

Configuration fine au niveau fichier : attributes et notes

– .gitattributes` : principe et portée — règles attachées aux chemins de fichiers
– Gestion des fins de ligne et de l’encodage : `text`, `eol`, `working-tree-encoding` — éviter les diffs parasites en équipe cross-OS
– Diff et merge personnalisés : `diff.driver`, `merge.driver` — rendre lisibles les diffs de fichiers binaires (Word, images) ou de formats structurés
– Filtres `clean` et `smudge` : transformer le contenu à l’entrée/sortie du dépôt — usage pour secrets, formatage, normalisation
– `export-ignore` et `linguist-*` : contrôler les exports d’archive et la détection de langage par GitHub/GitLab
– `git notes` : annoter un commit sans réécrire son hash — usage pour CI, code review, classement par catégorie
– Partage des notes : refspecs dédiées, synchronisation avec un remote

**Exemples d’activités pratiques :**

– Mise en place d’un driver de diff lisible pour un fichier Word ou un format JSON ordonné
– Configuration d’un filtre clean/smudge pour normaliser un fichier de configuration avant commit
– Ajout, classement par catégorie et partage de notes sur l’historique d’un dépôt existant

Patches et collaboration hors plateforme

– Pourquoi les patches : scénarios de contribution sans GitHub/GitLab (kernel-style, échange inter-organisations, dépôts cloisonnés)
– `git format-patch` : génération d’une série de patches à partir d’un ou plusieurs commits — anatomie d’un fichier `.patch`
– `git apply` vs `git am` : appliquer un patch sans historique vs intégrer une série en préservant l’auteur et le message
– Workflow complet : préparer une série, l’envoyer, la recevoir, l’appliquer, gérer les conflits
– Bundles Git : `git bundle` pour échanger un dépôt entier ou une portion sans réseau partagé
– Bonnes pratiques : tester un patch avec `–check`, signer un patch, gérer les rejets

**Exemples d’activités pratiques :**

– Génération d’une série de patches d’une feature et application sur un dépôt cible avec `git am`
– Création d’un bundle Git pour échanger un sous-ensemble du dépôt
– Gestion d’un conflit lors de l’application d’un patch et résolution avec `git am –continue`

Multi-arborescence et dépôts composites

– git worktree` : plusieurs branches checkout-ées en parallèle sans clone — gain quand on jongle entre hotfix et feature
– Cycle de vie d’un worktree : `add`, `list`, `lock`, `move`, `remove` — entretien et nettoyage
– Sous-modules : intégrer un dépôt dans un dépôt — ajout, clone récursif, mise à jour, suppression propre
– Pièges des sous-modules : commits détachés, mises à jour à coordonner, branches non suivies — pratiques pour les éviter
– Subtrees : alternative aux sous-modules par fusion d’histoires — `git subtree add`, `pull`, `push`, `split`
– Arbitrer sous-module vs subtree vs monorepo : critères de choix (couplage, propriété, fréquence de mise à jour, taille)

**Exemples d’activités pratiques :**

– Mise en place d’un worktree pour traiter un hotfix sans abandonner la branche en cours
– Ajout d’un sous-module à un dépôt existant, clonage récursif et mise à jour vers une nouvelle version
– Comparaison sur un même cas concret de l’intégration via sous-module et via subtree
– Choix raisonné sous-module / subtree / monorepo sur un scénario projet donné

Gros dépôts et performance

– Anatomie d’un dépôt qui devient lourd : binaires, longue histoire, monorepo — symptômes (clone lent, opérations qui rament)
– Git LFS (Large File Storage) : principe pointer-store, installation et configuration côté client, `git lfs track`
– Workflow LFS au quotidien : commits, fetch, push, migration d’historique existant vers LFS
– Clones partiels et superficiels : `–depth`, `–shallow-since`, `–single-branch` — quand et comment unshallow
– `–filter=blob:none` et `partial clone` : récupérer la structure sans tous les blobs, fetch à la demande
– `sparse-checkout` : ne matérialiser qu’une partie de l’arborescence — modes cone et non-cone
– Combinaison `partial clone` + `sparse-checkout` : pattern recommandé pour gros monorepos

**Exemples d’activités pratiques :**

– Mise en place de Git LFS sur un dépôt contenant des assets binaires et migration de l’historique
– Réalisation d’un partial clone d’un gros dépôt et observation des fetches à la demande
– Configuration d’un `sparse-checkout` pour ne récupérer qu’un sous-projet d’un monorepo

Notre charte qualité et éthique.

A travers sa Charte Engagement Qualité, Sparks s’engage à tout mettre en œuvre pour que chaque session de formation soit un succès et que votre satisfaction soit totale.

Amandine de Sparks
Des chiffres étincelants.
20 années
à vos côtés
+ de 1000
sujets de formation
11 178
apprenants formés en 2025
252
formateurs actifs en 2025
98,1%
d'apprenants satisfaits
26 075
heures de formation réalisées en 2025
HAUT