Communitygithub.com

Assistant Git - Contrôle de version expert

Assistance experte en contrôle de version Git couvrant le branching, le rebase interactif, le cherry-pick, les sous-modules, les worktrees et la résolution de conflits. À utiliser pour gérer l'historique du code source et les workflows collaboratifs.

Qu'est-ce que Assistant Git - Contrôle de version expert ?

Cette compétence fournit une assistance experte et complète pour Git, le système de contrôle de version fondamental du développement logiciel moderne. Elle est conçue pour aider les développeurs à maîtriser des flux de travail Git complexes, notamment la gestion des branches, la réécriture d'historique avec rebase interactif, la recherche automatisée de régressions avec `git bisect`, l'isolation de contextes de travail simultanés avec `git worktree`, et l'optimisation des performances pour les grands monorepos avec Sparse Checkout et Scalar. La compétence guide également sur les meilleures pratiques modernes comme l'utilisation de `git switch` et `git restore`, la signature de commits, et l'écriture de messages de commit conventionnels. En suivant la documentation SKILL.md fournie, les utilisateurs peuvent améliorer leur efficacité, éviter les pièges courants et adopter des workflows Git robustes et évolutifs.

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/G1Joshi/Agent-Skills/tree/HEAD/skills/tools/git

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Git

Git est le fondement du logiciel moderne. En 2025, des fonctionnalités comme Sparse Checkout et Scalar (pour les monorepos) deviennent courantes.

Quand l'utiliser

  • Branchement et collaboration : Gestion de l'isolation des fonctionnalités, pull requests, développement trunk-based et revues de code au sein d'équipes réparties.
  • Réécriture et nettoyage de l'historique : Linéarisation des graphes de commits, écrasement des commits en cours et édition des messages via git rebase -i avant la fusion dans les branches principales.
  • Chasse automatisée aux bogues : Isolement des commits introduisant une régression sur des milliers de révisions via la recherche binaire avec git bisect.
  • Contextes d'espace de travail simultanés : Travail sur des correctifs urgents sans avoir à mettre de côté ou changer de contexte de branche avec git worktree.
  • Passage à l'échelle des grands dépôts : Optimisation des performances dans les monorepos massifs avec Git Sparse Checkout, Scalar et les clones superficiels.

Démarrage rapide

# Cloner le dépôt et créer une nouvelle branche de fonctionnalité
git clone https://github.com/monorg/projet.git
cd projet

# Créer et basculer sur une nouvelle branche avec la commande moderne
git switch -c feature/flux-auth

# Stager, commiter et pousser avec suivi amont
git add .
git commit -m "feat(auth): implémenter le flux d'autorisation oauth2"
git push -u origin feature/flux-auth

Concepts fondamentaux

L'architecture des 3 arbres (Working Tree, Index, HEAD)

Git gère les fichiers à travers trois états distincts plutôt que de simplement suivre les modifications entre révisions :

# 1. Working Tree : Fichiers modifiés non commités dans votre éditeur
echo "export const API_URL = 'https://api.v2.internal';" >> config.ts

# 2. Index (Zone de staging) : Contenu préparé pour le prochain commit
git add config.ts

# 3. HEAD : Le dernier instantané commité sur la branche active
git diff --staged  # Inspecter la différence entre Staging et HEAD
git commit -m "chore(config): mettre à jour le point de terminaison API interne"

Graphe acyclique dirigé (DAG) et objets immuables

Chaque commit dans Git est un nœud immuable pointant vers des hachages parents et un arbre racine d'instantanés de blobs.

# Inspecter l'objet brut derrière tout hachage de commit ou HEAD
git cat-file -p HEAD
# Sortie :
# tree 4b825dc642cb6eb9a060e54bf8d69288fbee4904
# parent 8f3d1e1c3a628a58a98b47cf7d12a9e32049e712
# author Alice <[email protected]> 1727420400 +0000
# committer Alice <[email protected]> 1727420400 +0000
#
# feat(auth): implémenter le flux d'autorisation oauth2

Navigation moderne entre branches (git switch vs git restore)

Git moderne désambiguïse la commande surchargée git checkout en opérations dédiées :

# Changement de branche (remplace git checkout <branche>)
git switch main
git switch -c feature/paiements   # Créer et basculer

# Restauration de fichier (remplace git checkout -- <fichier>)
git restore src/app.ts           # Abandonner les modifications non commitées du répertoire de travail
git restore --staged src/app.ts  # Désindexer le fichier de l'index vers le répertoire de travail

Stratégies Rebase vs Merge

  • Merge (git merge <branche>) : Préserve le contexte historique complet avec un commit de fusion à deux parents. Idéal pour intégrer des branches de version à longue durée de vie.
  • Rebase (git rebase <amont>) : Rejoue les commits thématiques de manière linéaire sur le HEAD amont, empêchant les graphes enchevêtrés. Idéal pour nettoyer les branches de fonctionnalité avant la revue de PR.
# Rebaser proprement la branche de fonctionnalité sur le dernier main
git switch feature/flux-auth
git fetch origin main
git rebase origin/main

Modèles courants

Développement multi-branches avec Git Worktrees

Problème : Mettre de côté le travail non commité pour basculer de branche afin de corriger un bogue de production urgent.

Solution : Extraire plusieurs branches dans des répertoires séparés simultanément :

# Créer un dossier worktree parallèle pour la branche de correctif
git worktree add ../branche-correctif main

# Travailler sur le correctif dans un répertoire séparé sans toucher à l'espace de travail actuel
cd ../branche-correctif
git commit -am "fix: corriger une vulnérabilité d'authentification critique"
git push origin branche-correctif

# Nettoyer le worktree une fois terminé
cd ../projet
git worktree remove ../branche-correctif

Rebase interactif pour un historique propre des pull requests

Problème : La branche de fonctionnalité contient des dizaines de commits désordonnés du type "WIP", "correction ortho" ou "point de contrôle". Solution : Écraser et nettoyer l'historique de manière interactive avant d'ouvrir une pull request.

# Rebaser les 4 derniers commits de manière interactive
git rebase -i HEAD~4

# Dans l'éditeur interactif :
# pick 8f3d1e1 feat(auth): ajouter la génération de jeton
# squash 4b825dc corriger l'orthographe dans le payload du jeton
# squash a1c94e2 ajouter l'import manquant
# reword 91f7a02 feat(auth): ajouter le point de terminaison du jeton d'actualisation

Chasse automatisée aux régressions avec Git Bisect

Problème : Un bogue a été introduit quelque part parmi 500 commits, mais le commit exact est inconnu. Solution : Lancer une recherche binaire avec un script d'exécution de test automatisé.

# Démarrer une session bisect
git bisect start
git bisect bad HEAD                  # Le HEAD actuel est cassé
git bisect good v2.1.0               # v2.1.0 était connu comme fonctionnel

# Exécuter automatiquement le script de test à chaque étape du bisect
git bisect run npm test -- --runInBand

# Git se termine au premier commit exact qui a cassé la suite de tests
git bisect reset

Bonnes pratiques (2026)

À faire :

  • Utiliser git switch et git restore : Éviter le git checkout surchargé pour prévenir les changements de branche ou les écrasements de fichiers accidentels.
  • Pousser avec --force-with-lease : Se protéger contre l'écrasement des commits de collègues sur les branches distantes.
  • Activer la maintenance en arrière-plan : Exécuter git maintenance start pour optimiser les packfiles, les graphes de commits et les performances de fetch.
  • Signer les commits avec SSH / GPG : Garantir l'authenticité de la paternité des commits dans les pipelines de production.
  • Écrire des commits conventionnels : Utiliser des préfixes standardisés (feat:, fix:, chore:, refactor:) pour automatiser le versionnage sémantique et les journaux de modifications.

À ne pas faire :

  • Ne pas forcer le push sur les branches protégées : Ne jamais réécrire l'historique sur main, master ou les branches de version partagées.
  • Ne pas commiter de secrets ou d'identifiants : Utiliser .gitignore et git-secrets/trufflehog ; une fois commités, les identifiants persistent dans les blobs des packfiles même s'ils sont supprimés ultérieurement.
  • Ne pas utiliser directement de gros fichiers binaires : Stocker les gros poids de modèles ou les médias dans Git LFS (Large File Storage) ou S3.
  • Ne pas fusionner des arbres de travail sales : Mettre de côté (stash) ou commiter les modifications avant de tirer (pull) ou de rebaser pour éviter des conflits de fichiers accidentels.

Dépannage

ErreurCauseSolution
fatal: refusing to merge unrelated historiesTirage depuis un dépôt initialisé indépendamment sans commit racine partagé.Exécuter git pull origin main --allow-unrelated-histories.
HEAD detached at ...Extraction d'un hachage de commit spécifique plutôt qu'un nom de branche.Créer une branche à partir de la position actuelle : git switch -c branche-recuperation.
Merge conflict in file.txtDes commits concurrents ont modifié des lignes identiques dans des branches opposées.Résoudre les marqueurs de conflit (<<<<<<<), stagifier le fichier (git add), puis exécuter git commit.

Références

Individual skills in this repo

This repo contains 11 individual skills — each has its own dedicated page.

G1Joshi/Agent-Skills

Expert Dask distributed computing assistance covering Dask DataFrames, Arrays, Futures, and cluster scaling. Use when analyzing datasets too large for pandas on a single machine or multi-node cluster.

G1Joshi/Agent-Skills

Expert dbt (data build tool) assistance covering SQL modeling, Jinja macros, tests, documentation, and semantic layer. Use when building analytics engineering pipelines on BigQuery, Snowflake, or PostgreSQL.

G1Joshi/Agent-Skills

Expert JAX assistance covering Autograd, XLA compilation (`jit`), vectorization (`vmap`), and parallelization (`pmap`). Use when building high-performance numerical computing and cutting-edge deep learning research.

G1Joshi/Agent-Skills

Expert Ray distributed computing assistance covering Ray Core (actors, tasks), Ray Train, Ray Tune, and Ray Serve. Use when scaling Python compute and ML training across multi-node clusters.

G1Joshi/Agent-Skills

Expert K9s CLI assistance covering terminal Kubernetes cluster navigation, real-time log streaming, port forwarding, and pod debugging. Use when managing and troubleshooting Kubernetes clusters with speed.

G1Joshi/Agent-Skills

Expert SWC assistance covering high-performance Rust-based JavaScript/TypeScript compilation, .swcrc configuration, Jest testing via @swc/jest, and minification. Use when replacing Babel with SWC for faster builds, accelerating test execution, or compiling modern ECMAScript features.

G1Joshi/Agent-Skills

Expert Tig assistance covering text-mode interface for Git, interactive staging, commit graph visualization, diff exploration, and blame navigation. Use when navigating Git commit history in the terminal, staging hunks interactively, browsing file changes, or reviewing revisions.

G1Joshi/Agent-Skills

Expert Vim assistance covering modal editing, .vimrc configuration, registers, macros, search/replace, and plugin management via vim-plug. Use when editing text efficiently in terminal environments, writing Vimscript, recording macros, or configuring core Vim settings.

G1Joshi/Agent-Skills

Expert Zed editor assistance covering high-performance Rust-based text editing, multi-buffer editing, language server protocols (LSP), and AI assistant integrations. Use when configuring Zed settings.json, setting up language extensions, collaborating in real-time channels, or optimizing editor startup speed.

G1Joshi/Agent-Skills

Expert Zsh assistance covering shell customization, Oh My Zsh plugins, Zinit plugin manager, prompt engineering (Starship/Powerlevel10k), and shell scripting. Use when configuring .zshrc, writing Zsh automation scripts, optimizing shell startup time, or configuring tab-completion.

G1Joshi/Agent-Skills

Expert [skill-name] assistance covering [feature 1], [feature 2], and [feature 3]. Use when [working with X], [debugging Y], or [implementing Z].

Skills associés