Cas pratiques Git

30 cas pratiques Git disponibles. Niveaux : fondamental (10), avancé (10), expert (10).

Fait partie de : Cas pratiques d’intégration et déploiement continus

FondamentalGit

Annulation d'un commit local non poussé

Contexte : Vous avez réalisé un commit contenant une modification incorrecte dans votre dépôt local. Le Problème : Le commit n'a pas encore été poussé vers le dépôt distant, mais vous souhaitez revenir à l'état précédent. Contraintes : Vous devez conserver les fichiers modifiés dans votre espace de travail (ne pas perdre les changements). Livrable attendu : Décrire la commande Git appropriée pour annuler le commit tout en conservant les modifications dans le working directory.

gitcommitreset+1
FondamentalGit

Consultation de l'historique des commits d'un projet

Contexte : Vous devez analyser les dernières modifications apportées au projet avant une revue de code. Le Problème : Vous ne savez pas quelles commandes utiliser pour afficher un historique clair et concis. Contraintes : Utiliser uniquement les commandes Git en ligne de commande. Livrable attendu : Fournir les commandes permettant d'afficher l'historique détaillé et un historique condensé des commits récents.

gitloghistory+1
FondamentalGit

Correction d'un fichier ajouté par erreur au repository

Contexte : Un développeur a ajouté un fichier .env contenant des informations sensibles dans le dépôt local. Le Problème : Le fichier est déjà indexé mais n'a pas encore été poussé vers le dépôt distant. Contraintes : Retirer le fichier du suivi Git sans le supprimer du disque et l'ajouter au .gitignore. Livrable attendu : Décrire les commandes Git nécessaires pour retirer le fichier du tracking et éviter qu'il soit inclus dans les prochains commits.

gitgitignoretracking+1
FondamentalGit

Correction d'un push refusé pour cause d'historique divergent

Contexte : Vous tentez de pousser vos modifications vers origin/main. Le Problème : Git refuse le push avec un message indiquant que la branche distante contient des commits que vous n'avez pas localement. Contraintes : Vous devez récupérer les changements distants avant de pousser à nouveau, sans perdre vos propres modifications. Livrable attendu : Décrire les étapes Git permettant de résoudre proprement ce refus de push.

gitpushpull+1
FondamentalGit

Création d'une branche propre pour une nouvelle fonctionnalité

Contexte : Vous devez commencer le développement d'une nouvelle fonctionnalité sans impacter la branche principale. Le Problème : Certains développeurs travaillent directement sur main, créant des risques d'instabilité. Contraintes : Utiliser les bonnes pratiques Git en créant une branche dédiée depuis main. Aucun outil graphique. Livrable attendu : Fournir les commandes Git nécessaires pour créer une nouvelle branche feature/login, basculer dessus et vérifier son état correctement.

gitbranchworkflow+1
FondamentalGit

Initialisation correcte d'un nouveau repository local

Contexte : Vous démarrez un nouveau projet backend et devez versionner le code dès le départ. Le Problème : Aucun repository Git n'est encore configuré dans le dossier du projet. Contraintes : Initialiser le dépôt, ajouter tous les fichiers existants et effectuer un premier commit clair. Livrable attendu : Décrire les étapes Git permettant d'initialiser le repository et créer un commit initial propre.

gitinitrepository+1
FondamentalGit

Renommage d'une branche locale et distante

Contexte : L'équipe décide de renommer la branche master en main pour respecter les nouvelles conventions internes. Le Problème : La branche locale et la branche distante doivent être renommées proprement sans perdre l'historique. Contraintes : Utiliser uniquement les commandes Git standard. Livrable attendu : Fournir les commandes nécessaires pour renommer la branche localement puis mettre à jour le dépôt distant correctement.

gitbranchrename+1
FondamentalGit

Résolution d'un conflit de merge simple sur une branche feature

Contexte : Vous travaillez sur une application web en équipe. Une branche feature a été développée en parallèle de la branche main. Le Problème : Lors du merge de feature vers main, Git signale un conflit sur le fichier app.js car les deux branches ont modifié la même fonction. Contraintes : Vous devez résoudre le conflit proprement en conservant les deux logiques fonctionnelles. Aucun outil graphique autorisé, uniquement ligne de commande. Extrait du conflit : <<<<<<< HEAD console.log("Version production"); ======= console.log("Nouvelle feature"); >>>>>>> feature Livrable attendu : Décrire les étapes Git permettant de résoudre le conflit et produire un fichier final cohérent avant commit.

gitmergeconflict+2
FondamentalGit

Suppression d'une branche locale obsolète

Contexte : Une branche feature a été mergée dans main et n'est plus nécessaire. Le Problème : La branche locale reste présente et encombre la liste des branches. Contraintes : Supprimer la branche uniquement si elle a bien été mergée. Livrable attendu : Décrire la commande Git permettant de supprimer proprement une branche locale devenue inutile.

gitbranchcleanup+1
FondamentalGit

Synchronisation d'une branche locale avec le dépôt distant

Contexte : Vous travaillez sur une branche locale main qui n'a pas été synchronisée depuis plusieurs jours. Le Problème : De nouveaux commits ont été ajoutés sur le dépôt distant et vous devez mettre à jour votre copie locale. Contraintes : Utiliser uniquement la ligne de commande. Aucun rebase requis. Livrable attendu : Fournir les commandes nécessaires pour récupérer les dernières modifications depuis origin et mettre à jour proprement la branche locale.

gitpullfetch+1
AvancéGit

Cherry-pick d'un commit spécifique entre branches

Contexte : Un bug critique a été corrigé sur la branche develop mais doit être appliqué rapidement sur main sans merger toute la branche. Le Problème : Vous devez isoler uniquement le commit correctif et l'appliquer proprement sur main. Contraintes : Utiliser git cherry-pick sans modifier l'historique de develop. Livrable attendu : Décrire les commandes nécessaires pour identifier le commit concerné et l'appliquer proprement sur la branche main.

gitcherry-pickbranches+2
AvancéGit

Fusion sans commit automatique avec vérification manuelle

Contexte : Une branche feature doit être intégrée dans develop mais nécessite une vérification manuelle avant validation finale. Le Problème : Un merge standard crée immédiatement un commit de fusion. Contraintes : Vous devez effectuer un merge sans commit automatique afin d'inspecter les modifications avant validation. Livrable attendu : Décrire la commande Git permettant d'effectuer un merge sans commit automatique et finaliser ensuite le commit manuellement.

gitmergeworkflow+2
AvancéGit

Gestion avancée des sous-modules Git

Contexte : Un projet principal dépend d'un repository externe intégré en tant que sous-module. Le Problème : Les développeurs oublient régulièrement de mettre à jour le sous-module après un pull, provoquant des incohérences. Contraintes : Vous devez utiliser correctement les commandes Git relatives aux submodules sans outils supplémentaires. Livrable attendu : Décrire les commandes nécessaires pour initialiser, mettre à jour et synchroniser correctement un sous-module Git.

gitsubmoduledependency+2
AvancéGit

Gestion d'un stash complexe multi-fichiers

Contexte : Vous travaillez sur plusieurs fichiers mais devez changer rapidement de branche pour corriger un bug urgent. Le Problème : Vos modifications ne sont pas prêtes à être commit et vous devez les sauvegarder temporairement. Contraintes : Utiliser git stash pour sauvegarder, puis restaurer partiellement certains fichiers uniquement. Livrable attendu : Décrire les commandes Git permettant de stasher les modifications, lister les stashes et restaurer sélectivement certains changements.

gitstashworkflow+2
AvancéGit

Mise en place d'un workflow Git Flow simplifié

Contexte : Une équipe souhaite structurer son workflow avec des branches main, develop et feature. Le Problème : Les développeurs fusionnent directement sur main, créant des instabilités en production. Contraintes : Mettre en place un workflow clair utilisant branches develop et feature, avec merges contrôlés. Aucun outil externe. Livrable attendu : Décrire les étapes Git nécessaires pour structurer un workflow Git Flow simplifié et expliquer comment intégrer correctement une feature dans develop puis main.

gitworkflowbranches+2
AvancéGit

Nettoyage d'un historique contenant un fichier sensible déjà poussé

Contexte : Un fichier .env contenant des secrets a été poussé accidentellement sur le dépôt distant. Le Problème : Le fichier a été supprimé dans un commit ultérieur mais reste présent dans l'historique Git. Contraintes : Vous devez réécrire l'historique pour supprimer totalement ce fichier, en informant que cela implique un force push contrôlé. Livrable attendu : Décrire la stratégie Git permettant de retirer définitivement le fichier de l'historique et sécuriser le repository.

gitsecurityhistory+2
AvancéGit

Récupération d'un commit perdu grâce à reflog

Contexte : Un développeur a effectué un reset --hard par erreur et pense avoir perdu un commit important. Le Problème : Le commit n'apparaît plus dans l'historique classique via git log. Contraintes : Vous devez utiliser uniquement les outils Git natifs pour retrouver et restaurer le commit perdu. Livrable attendu : Décrire les commandes permettant d'utiliser git reflog pour identifier le commit et restaurer l'état précédent du repository.

gitreflogrecovery+2
AvancéGit

Réécriture contrôlée de l'historique avec rebase interactif

Contexte : Vous avez travaillé sur une branche feature et réalisé plusieurs commits peu structurés avec des messages imprécis. Le Problème : Avant d'ouvrir une Pull Request, l'équipe exige un historique propre avec des commits clairs et regroupés logiquement. Contraintes : Vous devez utiliser un rebase interactif pour modifier les messages et fusionner certains commits. La branche n'a pas encore été poussée sur le dépôt distant. Livrable attendu : Décrire les commandes Git permettant d'utiliser rebase interactif pour nettoyer l'historique, modifier des messages et regrouper des commits proprement.

gitrebasehistory+2
AvancéGit

Résolution d'un conflit complexe après rebase

Contexte : Vous avez exécuté un git rebase main sur votre branche feature pour mettre à jour votre travail. Le Problème : Plusieurs conflits apparaissent successivement sur différents fichiers et le rebase s'interrompt à chaque étape. Contraintes : Vous devez résoudre les conflits sans annuler le rebase et finaliser proprement l'opération. Aucun outil graphique autorisé. Livrable attendu : Expliquer les étapes Git nécessaires pour résoudre les conflits pendant un rebase et terminer l'opération correctement.

gitrebaseconflict+2
AvancéGit

Synchronisation avancée d'un fork avec le repository upstream

Contexte : Vous travaillez sur un fork personnel d'un projet open source. Le Problème : Le repository original (upstream) a évolué et votre fork est en retard. Contraintes : Vous devez ajouter un remote upstream, récupérer les mises à jour et synchroniser votre branche principale sans perdre vos modifications. Livrable attendu : Décrire les étapes Git nécessaires pour synchroniser correctement un fork avec son repository upstream.

gitforkremote+2
ExpertGit

Audit complet d'un repository pour analyse d'intégrité

Contexte : Un repository critique présente des comportements suspects et l'équipe souhaite vérifier son intégrité. Le Problème : Des incohérences dans l'historique et des objets manquants sont suspectés. Contraintes : Utiliser uniquement les outils Git natifs pour analyser l'intégrité du repository. Livrable attendu : Décrire les commandes permettant d'exécuter un audit complet avec git fsck et autres outils d'analyse afin d'identifier et corriger les anomalies potentielles.

gitauditintegrity+2
ExpertGit

Gestion avancée des hooks Git pour contrôle qualité local

Contexte : L'équipe souhaite empêcher les commits ne respectant pas certaines règles (lint, tests unitaires). Le Problème : Aucun contrôle automatisé n'est en place avant commit. Contraintes : Mettre en place un hook pre-commit et éventuellement pre-push sans outils externes obligatoires. Livrable attendu : Décrire comment créer et configurer des hooks Git locaux pour exécuter des scripts de validation avant autorisation d'un commit ou push.

githooksquality+2
ExpertGit

Gestion avancée des sous-modules imbriqués

Contexte : Un projet principal contient plusieurs sous-modules, eux-mêmes dépendants d'autres sous-modules. Le Problème : Les développeurs rencontrent des erreurs lors des clones récursifs et des mises à jour. Contraintes : Utiliser les options avancées de git submodule pour gérer les dépendances imbriquées proprement. Livrable attendu : Décrire la procédure complète pour cloner, initialiser et synchroniser des sous-modules imbriqués sans incohérence.

gitsubmodulenested+2
ExpertGit

Migration d'un repository monolithique vers sous-répertoires filtrés

Contexte : Une entreprise souhaite extraire un module spécifique d'un monorepo pour en faire un repository indépendant. Le Problème : L'historique complet du sous-dossier doit être conservé sans inclure les autres parties du projet. Contraintes : Utiliser uniquement des outils Git natifs ou filter-repo. Conserver l'historique des commits du module extrait. Livrable attendu : Décrire la stratégie permettant d'extraire proprement un sous-dossier avec son historique complet vers un nouveau repository.

gitmonorepomigration+2
ExpertGit

Mise en place d'une stratégie de gestion de versions sémantiques avec tags signés

Contexte : L'équipe souhaite formaliser ses releases avec un versionnement sémantique strict et sécurisé. Le Problème : Les versions actuelles ne sont pas taguées ou les tags ne sont pas signés. Contraintes : Mettre en place des tags annotés et signés GPG pour chaque release stable. Livrable attendu : Décrire les commandes nécessaires pour créer des tags annotés, les signer, et vérifier leur authenticité avant publication.

gittagsgpg+2
ExpertGit

Optimisation d'un repository volumineux avec nettoyage des objets orphelins

Contexte : Un repository ancien est devenu extrêmement lourd, ralentissant les clones et fetch. Le Problème : De nombreux objets inutilisés et fichiers volumineux persistent dans l'historique. Contraintes : Utiliser les commandes Git natives pour analyser et nettoyer les objets orphelins. Livrable attendu : Décrire la procédure incluant git gc, git prune et analyse de la taille du repository pour optimiser les performances.

gitoptimizationgc+2
ExpertGit

Réécriture complète d'historique partagé avec coordination d'équipe

Contexte : Un repository partagé contient plusieurs commits mal structurés déjà poussés sur origin/main. L'équipe souhaite nettoyer l'historique avant une release majeure. Le Problème : Les commits incluent des messages incohérents et des modifications non pertinentes. L'historique doit être réécrit proprement sans perdre de code. Contraintes : La branche est déjà partagée avec plusieurs développeurs. Toute réécriture implique un force push coordonné. Aucun outil graphique. Livrable attendu : Décrire une stratégie complète utilisant rebase interactif ou filter-repo, incluant communication d'équipe et procédure sécurisée de force push pour éviter la corruption du travail collaboratif.

gitrebasehistory+2
ExpertGit

Résolution d'un historique divergent complexe entre deux branches longues

Contexte : Deux branches longues ont évolué indépendamment pendant plusieurs semaines avec de nombreux commits divergents. Le Problème : Un simple merge génère un nombre massif de conflits difficiles à gérer. Contraintes : Vous devez choisir entre rebase ou merge stratégique, en minimisant les conflits et en conservant la traçabilité. Livrable attendu : Décrire une stratégie détaillée pour intégrer proprement les deux branches tout en réduisant les risques de perte de modifications.

gitmergerebase+2
ExpertGit

Restauration d'un repository après suppression accidentelle de branche distante

Contexte : Une branche critique a été supprimée du dépôt distant par erreur. Le Problème : Aucun backup externe n'est disponible et plusieurs commits importants semblent perdus. Contraintes : Vous devez utiliser uniquement les mécanismes internes Git pour tenter une récupération (reflog local, références cachées). Livrable attendu : Décrire une procédure avancée permettant d'identifier les références encore présentes localement et recréer la branche distante proprement.

gitrecoveryreflog+2
ExpertGit

Suppression définitive d'informations sensibles de tout l'historique

Contexte : Des clés API ont été exposées dans plusieurs commits historiques déjà poussés sur le dépôt distant. Le Problème : Les secrets doivent être supprimés totalement de l'historique Git et le repository sécurisé. Contraintes : Utiliser un outil adapté comme git filter-repo ou équivalent. Informer l'équipe des impacts du rewrite complet. Livrable attendu : Décrire la procédure complète pour nettoyer l'historique, effectuer un force push contrôlé et invalider les anciennes clés exposées.

gitsecurityrewrite+2

Questions originales conçues par CodeDuel. CodeDuel n'est affilié à aucun éditeur ni organisme de certification cité ; les noms de certifications et les marques appartiennent à leurs titulaires et servent uniquement à indiquer le domaine couvert. Signaler un contenu

    Cas pratiques Git : 30 mises en situation | CodeDuel