[{"data":1,"prerenderedAt":708},["ShallowReactive",2],{"/fr-fr/blog/keep-git-history-clean-with-interactive-rebase/":3,"navigation-fr-fr":35,"banner-fr-fr":455,"footer-fr-fr":467,"Tobias Günther":679,"next-steps-fr-fr":693},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"seo":8,"content":16,"config":25,"_id":28,"_type":29,"title":30,"_source":31,"_file":32,"_stem":33,"_extension":34},"/fr-fr/blog/keep-git-history-clean-with-interactive-rebase","blog",false,"",{"title":9,"description":10,"ogTitle":9,"ogDescription":10,"noIndex":6,"ogImage":11,"ogUrl":12,"ogSiteName":13,"ogType":14,"canonicalUrls":12,"schema":15},"Comment conserver un historique Git propre avec le rebase interactif","Le rebase interactif est l'un des outils les plus polyvalents de Git. Découvrez comment l'utiliser pour corriger vos messages de commit, réparer des erreurs et bien plus encore.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749662593/Blog/Hero%20Images/title-image.png","https://about.gitlab.com/blog/keep-git-history-clean-with-interactive-rebase","https://about.gitlab.com","article","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Comment conserver un historique Git propre avec le rebase interactif\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Tobias Günther\"}],\n        \"datePublished\": \"2020-11-23\",\n      }",{"title":9,"description":10,"authors":17,"heroImage":11,"date":19,"body":20,"category":21,"tags":22},[18],"Tobias Günther","2020-11-23","## Qu'est-ce qu’un rebase interactif ?\n\nLe rebase interactif, également connu sous le nom de *Git rebase interactive* en anglais, est un peu le « couteau suisse » de [Git](https://about.gitlab.com/fr-fr/blog/what-is-git/ \"Qu'est-ce que Git ? \") car il permet d’avoir accès à différents outils pour de nombreux usages possibles. Son cas d'utilisation principal restant cependant le nettoyage de l'historique des commits locaux.\n\nSoulignons bien ici le mot *local*. Le rebase interactif s'utilise uniquement pour __nettoyer votre propre historique de commits en local__, avant par exemple d'intégrer l’une de vos branches de fonctionnalités au sein d’une branche d’équipe. \n\nEn revanche, le rebase interactif (ou *Git rebase interactive*) ne doit pas être utilisé sur un historique de commits Git dont le push a déjà été effectué et partagé sur un dépôt distant. Le rebase interactif est l’un de ces outils qui « réécrivent » l'historique Git ; il ne doit donc pas être utilisé sur des commits déjà partagés avec d'autres personnes. Passé ce petit avertissement, voyons quelques exemples pratiques !\n\n## Corriger un ancien message de commit avec le rebase interactif\n\nParfois, vous remarquez une coquille dans un vieux message de commit. Ou bien, vous oubliez de mentionner quelque chose d'utile dans une description. Si l'on parle du tout dernier commit en date, vous pouvez utiliser l'option `--amend` de la commande `git commit`. Mais pour les commits plus anciens, le *Git rebase interactive* vous permet de les modifier après coup. \n\nVoici un exemple de message de commit nécessitant une correction :\n\n![Un mauvais message de commit qui nécessite une correction](https://about.gitlab.com/images/blogimages/how-to-keep-your-git-history-clean-with-interactive-rebase/bad-commit-message@2x.png){: .shadow.medium.center}\n{: .note.text-center}\n\nLa première étape dans toute session de *Git rebase interactive* consiste à __déterminer quelle partie de l'historique des commits__ vous souhaitez manipuler. Pour modifier le commit incorrect dans l'exemple précédent, nous devons démarrer la session à partir de son commit parent.\n\n![Démarrage de la session de Git rebase interactive](https://about.gitlab.com/images/blogimages/how-to-keep-your-git-history-clean-with-interactive-rebase/start-at-parent-commit@2x.png){: .shadow.medium.center}\n{: .note.text-center}\n\nNous pouvons maintenant transmettre le hash du commit de départ à la commande *Git rebase interactive* :\n\n```\n$ git rebase -i 0023cddd\n```\n\nUne fenêtre d’édition va alors s'ouvrir, contenant la liste des commits que vous venez de sélectionner. Ne soyez pas surpris s’ils apparaissent dans l'ordre inverse. Dans une session de rebase interactif, Git applique les commits élément après élément, du plus ancien au plus récent, ce qui signifie que l'inversion de l'ordre est correcte du point de vue de Git.\n\n![Fenêtre d'édition avec les commits sélectionnés](https://about.gitlab.com/images/blogimages/how-to-keep-your-git-history-clean-with-interactive-rebase/editor-window-start-ir@2x.png){: .shadow.medium.center}\n{: .note.text-center}\n\nUne chose importante à noter à propos de cette fenêtre d’édition : ce n'est pas ici que vous effectuez les manipulations réelles ! Dans cet exemple concret, ce n’est pas à cet endroit que vous modifiez le message du commit. Vous indiquez seulement le commit que vous allez modifier en appliquant un mot-clé d'action. Dans notre cas, comme nous voulons changer le message d'un commit, nous entrons la ligne « reword ». Si vous sauvegardez et fermez la fenêtre d’édition, une nouvelle fenêtre s'ouvrira, contenant l'ancien message de commit. \n\nIl est temps d'effectuer vos modifications :\n\n![Modifications du message du commit](https://about.gitlab.com/images/blogimages/how-to-keep-your-git-history-clean-with-interactive-rebase/correct-commit-message.gif){: .shadow.medium.center}\n{: .note.text-center}\n\nAprès avoir sauvegardé et fermé la fenêtre une fois de plus, la session de *Git rebase interactive* est terminée et notre ancien message de commit a été corrigé.\n\n## Combiner plusieurs commits en un seul avec le rebase interactif\n\nAutre cas d'usage du *Git rebase interactive* : lorsque vous souhaitez __combiner plusieurs anciens commentaires en un seul__. Bien entendu, la règle d'or du [contrôle de version](https://about.gitlab.com/fr-fr/topics/version-control/ \"Qu'est-ce que le contrôle de version ?\") s'applique : il est généralement conseillé de créer plus de petits commits plutôt que quelques gros. Cependant, nous pouvons parfois nous laisser emporter, et vouloir ensuite fusionner quelques commits en un seul.\n\nPrenons un exemple concret, où nous allons entreprendre de combiner les commits suivants :\n\n![Combinaison de plusieurs commits en un seul](https://about.gitlab.com/images/blogimages/how-to-keep-your-git-history-clean-with-interactive-rebase/squash-selected-commits@2x.png){: .shadow.medium.center}\n{: .note.text-center}\n\nComme dans notre premier cas, nous commençons par démarrer la session de *Git rebase interactive* au niveau du commit parent de celui que nous voulons manipuler.\n\n```\n$ git rebase -i 2b504bee\n```\n\nUne fois encore, une fenêtre d'édition s'ouvre, listant la partie de notre historique de [commits Git](https://about.gitlab.com/fr-fr/blog/keeping-git-commit-history-clean/ \"Commits Git\") que nous souhaitons manipuler.\n\n![Marquage des lignes avec « squash » ](https://about.gitlab.com/images/blogimages/how-to-keep-your-git-history-clean-with-interactive-rebase/squash-mark-commit@2x.png){: .shadow.medium.center}\n{: .note.text-center}\n\n### Marquer les lignes avec le mot-clé « squash »\n\nLe mot-clé d’action que nous allons utiliser ici s'appelle « squash ». Pour bien utiliser cette fonction, retenez que la ligne marquée avec le mot-clé « squash » sera combinée avec la ligne directement au-dessus. Ainsi, comme le montre la capture d'écran ci-dessus, nous avons marqué la ligne #2 avec « squash » afin de la combiner avec le commit de la ligne #1 juste au-dessus.\n\nNous pouvons maintenant sauvegarder et fermer la fenêtre d’édition ; une nouvelle fenêtre va alors apparaître. Il nous est maintenant demandé de fournir un message de commit pour le nouveau commit créé en combinant ces deux anciens.\n\n![Ajout d’un nouveau message pour le nouveau commit fusionné](https://about.gitlab.com/images/blogimages/how-to-keep-your-git-history-clean-with-interactive-rebase/squash-enter-new-message@2x.png){: .shadow.medium.center}\n{: .note.text-center}\n\nEnfin, sauvegardez et fermez cette fenêtre d’édition. Un nouveau commit est créé, contenant les modifications des deux anciens commits. \n\n## Corriger une erreur avec le rebase interactif\n\nUn autre cas d’usage du *Git rebase interactive* consiste à corriger une erreur identifiée dans l'un de vos commits précédents. La nature exacte de l'erreur n'a pas d'importance. Vous pourriez par exemple avoir oublié d'ajouter un changement, de supprimer un fichier, ou simplement de corriger une faute de frappe.\n\nDans une telle situation, nous avons tendance à vouloir créer un nouveau commit pour corriger cette erreur. Cela risque toutefois d'ajouter du désordre à votre historique de commits. Il n'est pas idéal d'ajouter un commit de fortune au commit initial juste pour corriger quelques erreurs. Votre historique de commits deviendra rapidement illisible, car jonché de multiples petits commits de correction. \n\nC'est là que vous pouvez profiter de « fixup », l'un des outils fournis avec le *Git rebase interactive*. « Fixup » applique ce commit de réparation rapide et ses changements au commit initial, le corrigeant ainsi. Ensuite, il se débarrasse simplement du commit de fortune. \n\n![Fonctionnement de « fixup »](https://about.gitlab.com/images/blogimages/how-to-keep-your-git-history-clean-with-interactive-rebase/diagram-fixup.png){: .medium.center}\n{: .note.text-center}\n\n### Comment utiliser « fixup » ?\n\nUne fois la fonction « fixup » utilisée, c'est comme si notre commit initial avait toujours été correct. Voyons cela à l'aide d'un exemple. \n\nLa première étape consiste à faire le nécessaire pour corriger le problème. Il peut s'agir d'ajouter un nouveau fichier, de modifier des fichiers existants ou de supprimer ceux qui sont obsolètes. Vous avez simplement à effectuer les modifications qui corrigent l'erreur.\n\nL'étape suivante consiste à valider ces modifications au niveau du dépôt, mais avec un petit truc en plus. Au moment du commit, nous allons ajouter `--fixup` et indiquer à Git le hash de notre mauvais commit :\n\n```\n$ git add corrections.txt\n$ git commit --fixup 2b504bee\n```\n\nJetez maintenant un coup d'œil à votre historique de commits. Vous constaterez qu'un commit d'apparence ordinaire a été créé. Mais à y voir de plus près, il s'est passé quelque chose. Le nouveau commit affiche la mention « fixup ! » et il reprend le sujet de notre mauvais commit.\n\n![Le commit initial et le commit de correction](https://about.gitlab.com/images/blogimages/how-to-keep-your-git-history-clean-with-interactive-rebase/fixup_create-fix-commit@2x.png){: .shadow.medium.center}\n{: .note.text-center}\n\nEnfin, la troisième étape consiste à démarrer la session de *Git rebase interactive*. Nous sélectionnons à nouveau le commit parent de notre mauvais commit comme point de départ :\n\n```\n$ git rebase -i 0023cddd --autosquash\n```\n\nEt pour conclure, nous utilisons notre botte secrète : `--autosquash`. Cette option nous assure de ne rien avoir à faire au sein de la fenêtre d’édition désormais ouverte. Regardons de plus près la situation :\n\n![Notre commit de correction est marqué « fixup » et classé à la bonne position](https://about.gitlab.com/images/blogimages/how-to-keep-your-git-history-clean-with-interactive-rebase/fixup_editor@2x.png){: .shadow.medium.center}\n{: .note.text-center}\n\nGit a automatiquement effectué deux choses :\n\n1. Le commit de correction de fortune est marqué comme « fixup ». \n2. L'ordre des lignes fait apparaître notre commit de correction directement sous le mauvais commit. Tout comme « squash », « fixup » combine le commit avec celui de la ligne supérieure.\n\nEnfin, il ne nous reste plus qu'à sauvegarder et à fermer la fenêtre d’édition.\n\nJetons un coup d'œil à l'historique des commits :\n\n![Problème résolu](https://about.gitlab.com/images/blogimages/how-to-keep-your-git-history-clean-with-interactive-rebase/fixup_final-corrected@2x.png){: .shadow.medium.center}\n{: .note.text-center}\n\nAinsi, le mauvais commit initial contient maintenant les changements du commit de secours. Mais en plus de cela, le commit de secours a maintenant disparu de l’historique de commits. Tout beau, tout propre, comme s'il n'y avait jamais eu le moindre problème !\n\n## Découvrez la puissance du rebase interactif\n\nVous allez pouvoir utiliser le Git rebase interactive dans de très nombreux cas, la plupart du temps afin de corriger des erreurs. Pour une vue d'ensemble de toutes les choses utiles à faire avec le rebase interactif, nous vous recommandons ce [guide sur Git](https://git-scm.com/book/fr/v2/Utilitaires-Git-R%C3%A9%C3%A9crire-l%E2%80%99historique).\n\n## FAQ sur le rebase interactif\n\n### Quelle est la différence entre rebase et merge ?\n\nVoilà une question souvent posée par les développeurs : rebase ou merge ? Ces commandes permettent d'effectuer des changements d'une branche à l'autre. Avec `git merge`, nous créons un commit de merge dans la branche locale. Avec `git rebase`, chaque commit de la branche locale est recréé en pointe de la branche principale. `Git rebase -i` interactif est similaire à git rebase, mais permet en plus de modifier les commits au moment de les envoyer vers la branche principale.\n\n### Quelle est la différence entre le Git rebase interactive et le Git rebase ?\n\nLorsque l'on ajoute l'option interactive au Git rebase, cela permet d'ouvrir une fenêtre d’édition afin d'éditer en amont chaque commit de votre branche locale avant de les rebaser, notamment pour nettoyer votre historique. Les commandes principales sont `reword` (éditer un message de commit), `squash` (fusionner deux commits), et `fixup` (amender un commit).\n\n### Quelles sont les erreurs à éviter avec le rebase interactif ?\n\nLe rebase interactif est généralement conseillé aux utilisateurs plutôt avancés. Lorsque vous utilisez ces commandes, veillez à éviter les pièges suivants :\n\n- __Ordre des commits.__ Conservez la logique du workflow lorsque vous réordonnez des commits.\n- __Sauvegarde.__ N'oubliez pas de sauvegarder et fermer votre fenêtre d'édition en fin de session de rebase interactif.\n- __Rebasing sur la branche principale.__ Le rebase s'applique toujours à des commits de votre branche locale vers la branche publique. \n\nImage de couverture par David Taljat sur [Pexels](https://www.pexels.com/@david-taljat-3748658/).\n","engineering",[23,24],"git","tutorial",{"slug":26,"featured":6,"template":27},"keep-git-history-clean-with-interactive-rebase","BlogPost","content:fr-fr:blog:keep-git-history-clean-with-interactive-rebase.yml","yaml","Keep Git History Clean With Interactive Rebase","content","fr-fr/blog/keep-git-history-clean-with-interactive-rebase.yml","fr-fr/blog/keep-git-history-clean-with-interactive-rebase","yml",{"_path":36,"_dir":37,"_draft":6,"_partial":6,"_locale":7,"data":38,"_id":451,"_type":29,"title":452,"_source":31,"_file":453,"_stem":454,"_extension":34},"/shared/fr-fr/main-navigation","fr-fr",{"logo":39,"freeTrial":44,"sales":49,"login":54,"items":59,"search":392,"minimal":428,"duo":442},{"config":40},{"href":41,"dataGaName":42,"dataGaLocation":43},"/fr-fr/","gitlab logo","header",{"text":45,"config":46},"Commencer un essai gratuit",{"href":47,"dataGaName":48,"dataGaLocation":43},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":50,"config":51},"Contacter l'équipe commerciale",{"href":52,"dataGaName":53,"dataGaLocation":43},"/fr-fr/sales/","sales",{"text":55,"config":56},"Connexion",{"href":57,"dataGaName":58,"dataGaLocation":43},"https://gitlab.com/users/sign_in/","sign in",[60,104,203,208,313,373],{"text":61,"config":62,"cards":64,"footer":87},"Plateforme",{"dataNavLevelOne":63},"platform",[65,71,79],{"title":61,"description":66,"link":67},"La plateforme DevSecOps alimentée par l'IA la plus complète",{"text":68,"config":69},"Découvrir notre plateforme",{"href":70,"dataGaName":63,"dataGaLocation":43},"/fr-fr/platform/",{"title":72,"description":73,"link":74},"GitLab Duo (IA)","Créez des logiciels plus rapidement en tirant parti de l'IA à chaque étape du développement",{"text":75,"config":76},"Découvrez GitLab Duo",{"href":77,"dataGaName":78,"dataGaLocation":43},"/fr-fr/gitlab-duo/","gitlab duo ai",{"title":80,"description":81,"link":82},"Choisir GitLab","10 raisons pour lesquelles les entreprises choisissent GitLab",{"text":83,"config":84},"En savoir plus",{"href":85,"dataGaName":86,"dataGaLocation":43},"/fr-fr/why-gitlab/","why gitlab",{"title":88,"items":89},"Démarrer avec",[90,95,100],{"text":91,"config":92},"Ingénierie de plateforme",{"href":93,"dataGaName":94,"dataGaLocation":43},"/fr-fr/solutions/platform-engineering/","platform engineering",{"text":96,"config":97},"Expérience développeur",{"href":98,"dataGaName":99,"dataGaLocation":43},"/fr-fr/developer-experience/","Developer experience",{"text":101,"config":102},"MLOps",{"href":103,"dataGaName":101,"dataGaLocation":43},"/fr-fr/topics/devops/the-role-of-ai-in-devops/",{"text":105,"left":106,"config":107,"link":109,"lists":113,"footer":185},"Produit",true,{"dataNavLevelOne":108},"solutions",{"text":110,"config":111},"Voir toutes les solutions",{"href":112,"dataGaName":108,"dataGaLocation":43},"/fr-fr/solutions/",[114,140,163],{"title":115,"description":116,"link":117,"items":122},"Automatisation","CI/CD et automatisation pour accélérer le déploiement",{"config":118},{"icon":119,"href":120,"dataGaName":121,"dataGaLocation":43},"AutomatedCodeAlt","/fr-fr/solutions/delivery-automation/","automated software delivery",[123,127,131,136],{"text":124,"config":125},"CI/CD",{"href":126,"dataGaLocation":43,"dataGaName":124},"/fr-fr/solutions/continuous-integration/",{"text":128,"config":129},"Développement assisté par l'IA",{"href":77,"dataGaLocation":43,"dataGaName":130},"AI assisted development",{"text":132,"config":133},"Gestion du code source",{"href":134,"dataGaLocation":43,"dataGaName":135},"/fr-fr/solutions/source-code-management/","Source Code Management",{"text":137,"config":138},"Livraison de logiciels automatisée",{"href":120,"dataGaLocation":43,"dataGaName":139},"Automated software delivery",{"title":141,"description":142,"link":143,"items":148},"Securité","Livrez du code plus rapidement sans compromettre la sécurité",{"config":144},{"href":145,"dataGaName":146,"dataGaLocation":43,"icon":147},"/fr-fr/solutions/security-compliance/","security and compliance","ShieldCheckLight",[149,153,158],{"text":150,"config":151},"Sécurité et conformité",{"href":145,"dataGaLocation":43,"dataGaName":152},"Security & Compliance",{"text":154,"config":155},"Sécurité de la chaîne d'approvisionnement logicielle",{"href":156,"dataGaLocation":43,"dataGaName":157},"/fr-fr/solutions/supply-chain/","Software supply chain security",{"text":159,"config":160},"Conformité et gouvernance",{"href":161,"dataGaLocation":43,"dataGaName":162},"/fr-fr/solutions/continuous-software-compliance/","Compliance and governance",{"title":164,"link":165,"items":170},"Mesures",{"config":166},{"icon":167,"href":168,"dataGaName":169,"dataGaLocation":43},"DigitalTransformation","/fr-fr/solutions/visibility-measurement/","visibility and measurement",[171,175,180],{"text":172,"config":173},"Visibilité et mesures",{"href":168,"dataGaLocation":43,"dataGaName":174},"Visibility and Measurement",{"text":176,"config":177},"Gestion de la chaîne de valeur",{"href":178,"dataGaLocation":43,"dataGaName":179},"/fr-fr/solutions/value-stream-management/","Value Stream Management",{"text":181,"config":182},"Données d'analyse et informations clés",{"href":183,"dataGaLocation":43,"dataGaName":184},"/fr-fr/solutions/analytics-and-insights/","Analytics and insights",{"title":186,"items":187},"GitLab pour",[188,193,198],{"text":189,"config":190},"Entreprises",{"href":191,"dataGaLocation":43,"dataGaName":192},"/fr-fr/enterprise/","enterprise",{"text":194,"config":195},"PME",{"href":196,"dataGaLocation":43,"dataGaName":197},"/fr-fr/small-business/","small business",{"text":199,"config":200},"Secteur public",{"href":201,"dataGaLocation":43,"dataGaName":202},"/fr-fr/solutions/public-sector/","public sector",{"text":204,"config":205},"Tarifs",{"href":206,"dataGaName":207,"dataGaLocation":43,"dataNavLevelOne":207},"/fr-fr/pricing/","pricing",{"text":209,"config":210,"link":212,"lists":216,"feature":300},"Ressources",{"dataNavLevelOne":211},"resources",{"text":213,"config":214},"Afficher toutes les ressources",{"href":215,"dataGaName":211,"dataGaLocation":43},"/fr-fr/resources/",[217,250,272],{"title":218,"items":219},"Premiers pas",[220,225,230,235,240,245],{"text":221,"config":222},"Installation",{"href":223,"dataGaName":224,"dataGaLocation":43},"/fr-fr/install/","install",{"text":226,"config":227},"Guides de démarrage rapide",{"href":228,"dataGaName":229,"dataGaLocation":43},"/fr-fr/get-started/","quick setup checklists",{"text":231,"config":232},"Apprentissage",{"href":233,"dataGaLocation":43,"dataGaName":234},"https://university.gitlab.com/","learn",{"text":236,"config":237},"Documentation sur le produit",{"href":238,"dataGaName":239,"dataGaLocation":43},"https://docs.gitlab.com/","product documentation",{"text":241,"config":242},"Vidéos sur les bonnes pratiques",{"href":243,"dataGaName":244,"dataGaLocation":43},"/fr-fr/getting-started-videos/","best practice videos",{"text":246,"config":247},"Intégrations",{"href":248,"dataGaName":249,"dataGaLocation":43},"/fr-fr/integrations/","integrations",{"title":251,"items":252},"Découvrir",[253,258,262,267],{"text":254,"config":255},"Histoires de succès client",{"href":256,"dataGaName":257,"dataGaLocation":43},"/fr-fr/customers/","customer success stories",{"text":259,"config":260},"Blog",{"href":261,"dataGaName":5,"dataGaLocation":43},"/fr-fr/blog/",{"text":263,"config":264},"Travail à distance",{"href":265,"dataGaName":266,"dataGaLocation":43},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"text":268,"config":269},"TeamOps",{"href":270,"dataGaName":271,"dataGaLocation":43},"/fr-fr/teamops/","teamops",{"title":273,"items":274},"Connecter",[275,280,285,290,295],{"text":276,"config":277},"Services GitLab",{"href":278,"dataGaName":279,"dataGaLocation":43},"/fr-fr/services/","services",{"text":281,"config":282},"Communauté",{"href":283,"dataGaName":284,"dataGaLocation":43},"/community/","community",{"text":286,"config":287},"Forum",{"href":288,"dataGaName":289,"dataGaLocation":43},"https://forum.gitlab.com/","forum",{"text":291,"config":292},"Événements",{"href":293,"dataGaName":294,"dataGaLocation":43},"/events/","events",{"text":296,"config":297},"Partenaires",{"href":298,"dataGaName":299,"dataGaLocation":43},"/fr-fr/partners/","partners",{"backgroundColor":301,"textColor":302,"text":303,"image":304,"link":308},"#2f2a6b","#fff","L'avenir du développement logiciel. Tendances et perspectives.",{"altText":305,"config":306},"carte promo The Source",{"src":307},"/images/navigation/the-source-promo-card.svg",{"text":309,"config":310},"Lire les articles les plus récents",{"href":311,"dataGaName":312,"dataGaLocation":43},"/fr-fr/the-source/","the source",{"text":314,"config":315,"lists":317},"Société",{"dataNavLevelOne":316},"company",[318],{"items":319},[320,325,331,333,338,343,348,353,358,363,368],{"text":321,"config":322},"À propos",{"href":323,"dataGaName":324,"dataGaLocation":43},"/fr-fr/company/","about",{"text":326,"config":327,"footerGa":330},"Emplois",{"href":328,"dataGaName":329,"dataGaLocation":43},"/jobs/","jobs",{"dataGaName":329},{"text":291,"config":332},{"href":293,"dataGaName":294,"dataGaLocation":43},{"text":334,"config":335},"Leadership",{"href":336,"dataGaName":337,"dataGaLocation":43},"/company/team/e-group/","leadership",{"text":339,"config":340},"Équipe",{"href":341,"dataGaName":342,"dataGaLocation":43},"/company/team/","team",{"text":344,"config":345},"Manuel",{"href":346,"dataGaName":347,"dataGaLocation":43},"https://handbook.gitlab.com/","handbook",{"text":349,"config":350},"Relations avec les investisseurs",{"href":351,"dataGaName":352,"dataGaLocation":43},"https://ir.gitlab.com/","investor relations",{"text":354,"config":355},"Centre de confiance",{"href":356,"dataGaName":357,"dataGaLocation":43},"/fr-fr/security/","trust center",{"text":359,"config":360},"Centre pour la transparence de l'IA",{"href":361,"dataGaName":362,"dataGaLocation":43},"/fr-fr/ai-transparency-center/","ai transparency center",{"text":364,"config":365},"Newsletter",{"href":366,"dataGaName":367,"dataGaLocation":43},"/company/contact/","newsletter",{"text":369,"config":370},"Presse",{"href":371,"dataGaName":372,"dataGaLocation":43},"/press/","press",{"text":374,"config":375,"lists":376},"Nous contacter",{"dataNavLevelOne":316},[377],{"items":378},[379,382,387],{"text":50,"config":380},{"href":52,"dataGaName":381,"dataGaLocation":43},"talk to sales",{"text":383,"config":384},"Aide",{"href":385,"dataGaName":386,"dataGaLocation":43},"/support/","get help",{"text":388,"config":389},"Portail clients GitLab",{"href":390,"dataGaName":391,"dataGaLocation":43},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":393,"login":394,"suggestions":401},"Fermer",{"text":395,"link":396},"Pour rechercher des dépôts et des projets, connectez-vous à",{"text":397,"config":398},"gitlab.com",{"href":57,"dataGaName":399,"dataGaLocation":400},"search login","search",{"text":402,"default":403},"Suggestions",[404,407,412,414,419,424],{"text":72,"config":405},{"href":77,"dataGaName":406,"dataGaLocation":400},"GitLab Duo (AI)",{"text":408,"config":409},"Suggestions de code (IA)",{"href":410,"dataGaName":411,"dataGaLocation":400},"/fr-fr/solutions/code-suggestions/","Code Suggestions (AI)",{"text":124,"config":413},{"href":126,"dataGaName":124,"dataGaLocation":400},{"text":415,"config":416},"GitLab sur AWS",{"href":417,"dataGaName":418,"dataGaLocation":400},"/fr-fr/partners/technology-partners/aws/","GitLab on AWS",{"text":420,"config":421},"GitLab sur Google Cloud ",{"href":422,"dataGaName":423,"dataGaLocation":400},"/fr-fr/partners/technology-partners/google-cloud-platform/","GitLab on Google Cloud",{"text":425,"config":426},"Pourquoi utiliser GitLab ?",{"href":85,"dataGaName":427,"dataGaLocation":400},"Why GitLab?",{"freeTrial":429,"mobileIcon":434,"desktopIcon":439},{"text":430,"config":431},"Commencer votre essai gratuit",{"href":432,"dataGaName":48,"dataGaLocation":433},"https://gitlab.com/-/trials/new/","nav",{"altText":435,"config":436},"Icône GitLab",{"src":437,"dataGaName":438,"dataGaLocation":433},"/images/brand/gitlab-logo-tanuki.svg","gitlab icon",{"altText":435,"config":440},{"src":441,"dataGaName":438,"dataGaLocation":433},"/images/brand/gitlab-logo-type.svg",{"freeTrial":443,"mobileIcon":447,"desktopIcon":449},{"text":444,"config":445},"En savoir plus sur GitLab Duo",{"href":77,"dataGaName":446,"dataGaLocation":433},"gitlab duo",{"altText":435,"config":448},{"src":437,"dataGaName":438,"dataGaLocation":433},{"altText":435,"config":450},{"src":441,"dataGaName":438,"dataGaLocation":433},"content:shared:fr-fr:main-navigation.yml","Main Navigation","shared/fr-fr/main-navigation.yml","shared/fr-fr/main-navigation",{"_path":456,"_dir":37,"_draft":6,"_partial":6,"_locale":7,"title":457,"button":458,"config":462,"_id":464,"_type":29,"_source":31,"_file":465,"_stem":466,"_extension":34},"/shared/fr-fr/banner","GitLab Duo Agent Platform est maintenant disponible en version bêta publique !",{"text":83,"config":459},{"href":460,"dataGaName":461,"dataGaLocation":43},"/gitlab-duo/agent-platform/","duo banner",{"layout":463},"release","content:shared:fr-fr:banner.yml","shared/fr-fr/banner.yml","shared/fr-fr/banner",{"_path":468,"_dir":37,"_draft":6,"_partial":6,"_locale":7,"data":469,"_id":675,"_type":29,"title":676,"_source":31,"_file":677,"_stem":678,"_extension":34},"/shared/fr-fr/main-footer",{"text":470,"source":471,"edit":477,"contribute":482,"config":487,"items":492,"minimal":666},"Git est une marque déposée de Software Freedom Conservancy et notre utilisation de « GitLab » est sous licence",{"text":472,"config":473},"Afficher le code source de la page",{"href":474,"dataGaName":475,"dataGaLocation":476},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":478,"config":479},"Modifier cette page",{"href":480,"dataGaName":481,"dataGaLocation":476},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":483,"config":484},"Veuillez contribuer",{"href":485,"dataGaName":486,"dataGaLocation":476},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":488,"facebook":489,"youtube":490,"linkedin":491},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[493,516,570,603,637],{"title":61,"links":494,"subMenu":499},[495],{"text":496,"config":497},"Plateforme DevSecOps",{"href":70,"dataGaName":498,"dataGaLocation":476},"devsecops platform",[500],{"title":204,"links":501},[502,506,511],{"text":503,"config":504},"Voir les forfaits",{"href":206,"dataGaName":505,"dataGaLocation":476},"view plans",{"text":507,"config":508},"Pourquoi choisir GitLab Premium ?",{"href":509,"dataGaName":510,"dataGaLocation":476},"/fr-fr/pricing/premium/","why premium",{"text":512,"config":513},"Pourquoi choisir GitLab Ultimate ?",{"href":514,"dataGaName":515,"dataGaLocation":476},"/fr-fr/pricing/ultimate/","why ultimate",{"title":517,"links":518},"Solutions",[519,524,527,529,534,539,543,546,549,554,556,558,560,565],{"text":520,"config":521},"Transformation digitale",{"href":522,"dataGaName":523,"dataGaLocation":476},"/fr-fr/topics/digital-transformation/","digital transformation",{"text":150,"config":525},{"href":145,"dataGaName":526,"dataGaLocation":476},"security & compliance",{"text":137,"config":528},{"href":120,"dataGaName":121,"dataGaLocation":476},{"text":530,"config":531},"Développement agile",{"href":532,"dataGaName":533,"dataGaLocation":476},"/fr-fr/solutions/agile-delivery/","agile delivery",{"text":535,"config":536},"Transformation cloud",{"href":537,"dataGaName":538,"dataGaLocation":476},"/fr-fr/topics/cloud-native/","cloud transformation",{"text":540,"config":541},"SCM",{"href":134,"dataGaName":542,"dataGaLocation":476},"source code management",{"text":124,"config":544},{"href":126,"dataGaName":545,"dataGaLocation":476},"continuous integration & delivery",{"text":176,"config":547},{"href":178,"dataGaName":548,"dataGaLocation":476},"value stream management",{"text":550,"config":551},"GitOps",{"href":552,"dataGaName":553,"dataGaLocation":476},"/fr-fr/solutions/gitops/","gitops",{"text":189,"config":555},{"href":191,"dataGaName":192,"dataGaLocation":476},{"text":194,"config":557},{"href":196,"dataGaName":197,"dataGaLocation":476},{"text":199,"config":559},{"href":201,"dataGaName":202,"dataGaLocation":476},{"text":561,"config":562},"Formation",{"href":563,"dataGaName":564,"dataGaLocation":476},"/fr-fr/solutions/education/","education",{"text":566,"config":567},"Services financiers",{"href":568,"dataGaName":569,"dataGaLocation":476},"/fr-fr/solutions/finance/","financial services",{"title":209,"links":571},[572,574,576,578,581,583,587,589,591,593,595,597,599,601],{"text":221,"config":573},{"href":223,"dataGaName":224,"dataGaLocation":476},{"text":226,"config":575},{"href":228,"dataGaName":229,"dataGaLocation":476},{"text":231,"config":577},{"href":233,"dataGaName":234,"dataGaLocation":476},{"text":236,"config":579},{"href":238,"dataGaName":580,"dataGaLocation":476},"docs",{"text":259,"config":582},{"href":261,"dataGaName":5},{"text":584,"config":585},"Histoires de réussite client",{"href":586,"dataGaLocation":476},"/customers/",{"text":254,"config":588},{"href":256,"dataGaName":257,"dataGaLocation":476},{"text":263,"config":590},{"href":265,"dataGaName":266,"dataGaLocation":476},{"text":276,"config":592},{"href":278,"dataGaName":279,"dataGaLocation":476},{"text":268,"config":594},{"href":270,"dataGaName":271,"dataGaLocation":476},{"text":281,"config":596},{"href":283,"dataGaName":284,"dataGaLocation":476},{"text":286,"config":598},{"href":288,"dataGaName":289,"dataGaLocation":476},{"text":291,"config":600},{"href":293,"dataGaName":294,"dataGaLocation":476},{"text":296,"config":602},{"href":298,"dataGaName":299,"dataGaLocation":476},{"title":314,"links":604},[605,607,609,611,613,615,617,621,626,628,630,632],{"text":321,"config":606},{"href":323,"dataGaName":316,"dataGaLocation":476},{"text":326,"config":608},{"href":328,"dataGaName":329,"dataGaLocation":476},{"text":334,"config":610},{"href":336,"dataGaName":337,"dataGaLocation":476},{"text":339,"config":612},{"href":341,"dataGaName":342,"dataGaLocation":476},{"text":344,"config":614},{"href":346,"dataGaName":347,"dataGaLocation":476},{"text":349,"config":616},{"href":351,"dataGaName":352,"dataGaLocation":476},{"text":618,"config":619},"Sustainability",{"href":620,"dataGaName":618,"dataGaLocation":476},"/sustainability/",{"text":622,"config":623},"Diversité, inclusion et appartenance (DIB)",{"href":624,"dataGaName":625,"dataGaLocation":476},"/fr-fr/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":354,"config":627},{"href":356,"dataGaName":357,"dataGaLocation":476},{"text":364,"config":629},{"href":366,"dataGaName":367,"dataGaLocation":476},{"text":369,"config":631},{"href":371,"dataGaName":372,"dataGaLocation":476},{"text":633,"config":634},"Déclaration de transparence sur l'esclavage moderne",{"href":635,"dataGaName":636,"dataGaLocation":476},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"title":374,"links":638},[639,642,644,646,651,656,661],{"text":640,"config":641},"Échanger avec un expert",{"href":52,"dataGaName":53,"dataGaLocation":476},{"text":383,"config":643},{"href":385,"dataGaName":386,"dataGaLocation":476},{"text":388,"config":645},{"href":390,"dataGaName":391,"dataGaLocation":476},{"text":647,"config":648},"Statut",{"href":649,"dataGaName":650,"dataGaLocation":476},"https://status.gitlab.com/","status",{"text":652,"config":653},"Conditions d'utilisation",{"href":654,"dataGaName":655},"/terms/","terms of use",{"text":657,"config":658},"Déclaration de confidentialité",{"href":659,"dataGaName":660,"dataGaLocation":476},"/fr-fr/privacy/","privacy statement",{"text":662,"config":663},"Préférences en matière de cookies",{"dataGaName":664,"dataGaLocation":476,"id":665,"isOneTrustButton":106},"cookie preferences","ot-sdk-btn",{"items":667},[668,670,673],{"text":652,"config":669},{"href":654,"dataGaName":655,"dataGaLocation":476},{"text":671,"config":672},"Politique de confidentialité",{"href":659,"dataGaName":660,"dataGaLocation":476},{"text":662,"config":674},{"dataGaName":664,"dataGaLocation":476,"id":665,"isOneTrustButton":106},"content:shared:fr-fr:main-footer.yml","Main Footer","shared/fr-fr/main-footer.yml","shared/fr-fr/main-footer",[680],{"_path":681,"_dir":682,"_draft":6,"_partial":6,"_locale":7,"content":683,"config":687,"_id":689,"_type":29,"title":690,"_source":31,"_file":691,"_stem":692,"_extension":34},"/en-us/blog/authors/tobias-gnther","authors",{"name":18,"config":684},{"headshot":685,"ctfId":686},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749659488/Blog/Author%20Headshots/gitlab-logo-extra-whitespace.png","Tobias-Gnther",{"template":688},"BlogAuthor","content:en-us:blog:authors:tobias-gnther.yml","Tobias Gnther","en-us/blog/authors/tobias-gnther.yml","en-us/blog/authors/tobias-gnther",{"_path":694,"_dir":37,"_draft":6,"_partial":6,"_locale":7,"header":695,"eyebrow":696,"blurb":697,"button":698,"secondaryButton":702,"_id":704,"_type":29,"title":705,"_source":31,"_file":706,"_stem":707,"_extension":34},"/shared/fr-fr/next-steps","Commencez à livrer des logiciels de meilleurs qualité plus rapidement","Plus de 50 % des entreprises du classement Fortune 100 font confiance à GitLab","Découvrez comment la plateforme DevSecOps intelligente\n\n\npeut aider votre équipe.\n",{"text":45,"config":699},{"href":700,"dataGaName":48,"dataGaLocation":701},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/","feature",{"text":50,"config":703},{"href":52,"dataGaName":53,"dataGaLocation":701},"content:shared:fr-fr:next-steps.yml","Next Steps","shared/fr-fr/next-steps.yml","shared/fr-fr/next-steps",1754424534163]