[{"data":1,"prerenderedAt":709},["ShallowReactive",2],{"/fr-fr/blog/keep-git-history-clean-with-interactive-rebase/":3,"navigation-fr-fr":35,"banner-fr-fr":455,"footer-fr-fr":468,"Tobias Günther":680,"next-steps-fr-fr":694},{"_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\n\nLe rebase interactif, également connu sous le nom de *Git rebase\ninteractive* en anglais, est un peu le « couteau suisse » de\n[Git](https://about.gitlab.com/fr-fr/blog/what-is-git/ \"Qu'est-ce\nque Git ? \") car il permet d’avoir accès à différents outils pour de\nnombreux usages possibles. Son cas d'utilisation principal restant cependant\nle nettoyage de l'historique des commits locaux.\n\n\nSoulignons bien ici le mot *local*. Le rebase interactif s'utilise\nuniquement pour __nettoyer votre propre historique de commits en local__,\navant par exemple d'intégrer l’une de vos branches de fonctionnalités au\nsein d’une branche d’équipe. \n\n\nEn revanche, le rebase interactif (ou *Git rebase interactive*) ne doit pas\nêtre utilisé sur un historique de commits Git dont le push a déjà été\neffectué et partagé sur un dépôt distant. Le rebase interactif est l’un de\nces outils qui « réécrivent » l'historique Git ; il ne doit donc pas être\nutilisé sur des commits déjà partagés avec d'autres personnes. Passé ce\npetit avertissement, voyons quelques exemples pratiques !\n\n\n## Corriger un ancien message de commit avec le rebase interactif\n\n\nParfois, vous remarquez une coquille dans un vieux message de commit. Ou\nbien, vous oubliez de mentionner quelque chose d'utile dans une description.\nSi l'on parle du tout dernier commit en date, vous pouvez utiliser l'option\n`--amend` de la commande `git commit`. Mais pour les commits plus anciens,\nle *Git rebase interactive* vous permet de les modifier après coup. \n\n\nVoici un exemple de message de commit nécessitant une correction :\n\n\n![Un mauvais message de commit qui nécessite une\ncorrection](https://about.gitlab.com/images/blogimages/how-to-keep-your-git-history-clean-with-interactive-rebase/bad-commit-message@2x.png){:\n.shadow.medium.center}\n\n{: .note.text-center}\n\n\nLa première étape dans toute session de *Git rebase interactive* consiste à\n__déterminer quelle partie de l'historique des commits__ vous souhaitez\nmanipuler. Pour modifier le commit incorrect dans l'exemple précédent, nous\ndevons démarrer la session à partir de son commit parent.\n\n\n![Démarrage de la session de Git rebase\ninteractive](https://about.gitlab.com/images/blogimages/how-to-keep-your-git-history-clean-with-interactive-rebase/start-at-parent-commit@2x.png){:\n.shadow.medium.center}\n\n{: .note.text-center}\n\n\nNous pouvons maintenant transmettre le hash du commit de départ à la\ncommande *Git rebase interactive* :\n\n\n```\n\n$ git rebase -i 0023cddd\n\n```\n\n\nUne fenêtre d’édition va alors s'ouvrir, contenant la liste des commits que\nvous venez de sélectionner. Ne soyez pas surpris s’ils apparaissent dans\nl'ordre inverse. Dans une session de rebase interactif, Git applique les\ncommits élément après élément, du plus ancien au plus récent, ce qui\nsignifie que l'inversion de l'ordre est correcte du point de vue de Git.\n\n\n![Fenêtre d'édition avec les commits\nsélectionnés](https://about.gitlab.com/images/blogimages/how-to-keep-your-git-history-clean-with-interactive-rebase/editor-window-start-ir@2x.png){:\n.shadow.medium.center}\n\n{: .note.text-center}\n\n\nUne chose importante à noter à propos de cette fenêtre d’édition : ce n'est\npas ici que vous effectuez les manipulations réelles ! Dans cet exemple\nconcret, ce n’est pas à cet endroit que vous modifiez le message du commit.\nVous indiquez seulement le commit que vous allez modifier en appliquant un\nmot-clé d'action. Dans notre cas, comme nous voulons changer le message d'un\ncommit, nous entrons la ligne « reword ». Si vous sauvegardez et fermez la\nfenêtre d’édition, une nouvelle fenêtre s'ouvrira, contenant l'ancien\nmessage de commit. \n\n\nIl est temps d'effectuer vos modifications :\n\n\n![Modifications du message du\ncommit](https://about.gitlab.com/images/blogimages/how-to-keep-your-git-history-clean-with-interactive-rebase/correct-commit-message.gif){:\n.shadow.medium.center}\n\n{: .note.text-center}\n\n\nAprès avoir sauvegardé et fermé la fenêtre une fois de plus, la session de\n*Git rebase interactive* est terminée et notre ancien message de commit a\nété corrigé.\n\n\n## Combiner plusieurs commits en un seul avec le rebase interactif\n\n\nAutre cas d'usage du *Git rebase interactive* : lorsque vous souhaitez\n__combiner plusieurs anciens commentaires en un seul__. Bien entendu, la\nrègle d'or du [contrôle de\nversion](https://about.gitlab.com/fr-fr/topics/version-control/ \"Qu'est-ce\nque le contrôle de version ?\") s'applique : il est généralement conseillé de\ncréer plus de petits commits plutôt que quelques gros. Cependant, nous\npouvons parfois nous laisser emporter, et vouloir ensuite fusionner quelques\ncommits en un seul.\n\n\nPrenons un exemple concret, où nous allons entreprendre de combiner les\ncommits suivants :\n\n\n![Combinaison de plusieurs commits en un\nseul](https://about.gitlab.com/images/blogimages/how-to-keep-your-git-history-clean-with-interactive-rebase/squash-selected-commits@2x.png){:\n.shadow.medium.center}\n\n{: .note.text-center}\n\n\nComme dans notre premier cas, nous commençons par démarrer la session de\n*Git rebase interactive* au niveau du commit parent de celui que nous\nvoulons manipuler.\n\n\n```\n\n$ git rebase -i 2b504bee\n\n```\n\n\nUne fois encore, une fenêtre d'édition s'ouvre, listant la partie de notre\nhistorique de [commits\nGit](https://about.gitlab.com/fr-fr/blog/keeping-git-commit-history-clean/\n\"Commits Git\") que nous souhaitons manipuler.\n\n\n![Marquage des lignes avec « squash »\n](https://about.gitlab.com/images/blogimages/how-to-keep-your-git-history-clean-with-interactive-rebase/squash-mark-commit@2x.png){:\n.shadow.medium.center}\n\n{: .note.text-center}\n\n\n### Marquer les lignes avec le mot-clé « squash »\n\n\nLe mot-clé d’action que nous allons utiliser ici s'appelle « squash ». Pour\nbien utiliser cette fonction, retenez que la ligne marquée avec le mot-clé «\nsquash » sera combinée avec la ligne directement au-dessus. Ainsi, comme le\nmontre la capture d'écran ci-dessus, nous avons marqué la ligne #2 avec «\nsquash » afin de la combiner avec le commit de la ligne #1 juste au-dessus.\n\n\nNous pouvons maintenant sauvegarder et fermer la fenêtre d’édition ; une\nnouvelle fenêtre va alors apparaître. Il nous est maintenant demandé de\nfournir un message de commit pour le nouveau commit créé en combinant ces\ndeux anciens.\n\n\n![Ajout d’un nouveau message pour le nouveau commit\nfusionné](https://about.gitlab.com/images/blogimages/how-to-keep-your-git-history-clean-with-interactive-rebase/squash-enter-new-message@2x.png){:\n.shadow.medium.center}\n\n{: .note.text-center}\n\n\nEnfin, sauvegardez et fermez cette fenêtre d’édition. Un nouveau commit est\ncréé, contenant les modifications des deux anciens commits. \n\n\n## Corriger une erreur avec le rebase interactif\n\n\nUn autre cas d’usage du *Git rebase interactive* consiste à corriger une\nerreur identifiée dans l'un de vos commits précédents. La nature exacte de\nl'erreur n'a pas d'importance. Vous pourriez par exemple avoir oublié\nd'ajouter un changement, de supprimer un fichier, ou simplement de corriger\nune faute de frappe.\n\n\nDans une telle situation, nous avons tendance à vouloir créer un nouveau\ncommit pour corriger cette erreur. Cela risque toutefois d'ajouter du\ndésordre à votre historique de commits. Il n'est pas idéal d'ajouter un\ncommit de fortune au commit initial juste pour corriger quelques erreurs.\nVotre historique de commits deviendra rapidement illisible, car jonché de\nmultiples petits commits de correction. \n\n\nC'est là que vous pouvez profiter de « fixup », l'un des outils fournis avec\nle *Git rebase interactive*. « Fixup » applique ce commit de réparation\nrapide et ses changements au commit initial, le corrigeant ainsi. Ensuite,\nil se débarrasse simplement du commit de fortune. \n\n\n![Fonctionnement de « fixup\n»](https://about.gitlab.com/images/blogimages/how-to-keep-your-git-history-clean-with-interactive-rebase/diagram-fixup.png){:\n.medium.center}\n\n{: .note.text-center}\n\n\n### Comment utiliser « fixup » ?\n\n\nUne fois la fonction « fixup » utilisée, c'est comme si notre commit initial\navait toujours été correct. Voyons cela à l'aide d'un exemple. \n\n\nLa première étape consiste à faire le nécessaire pour corriger le problème.\nIl peut s'agir d'ajouter un nouveau fichier, de modifier des fichiers\nexistants ou de supprimer ceux qui sont obsolètes. Vous avez simplement à\neffectuer les modifications qui corrigent l'erreur.\n\n\nL'étape suivante consiste à valider ces modifications au niveau du dépôt,\nmais avec un petit truc en plus. Au moment du commit, nous allons ajouter\n`--fixup` et indiquer à Git le hash de notre mauvais commit :\n\n\n```\n\n$ git add corrections.txt\n\n$ git commit --fixup 2b504bee\n\n```\n\n\nJetez maintenant un coup d'œil à votre historique de commits. Vous\nconstaterez qu'un commit d'apparence ordinaire a été créé. Mais à y voir de\nplus près, il s'est passé quelque chose. Le nouveau commit affiche la\nmention « fixup ! » et il reprend le sujet de notre mauvais commit.\n\n\n![Le commit initial et le commit de\ncorrection](https://about.gitlab.com/images/blogimages/how-to-keep-your-git-history-clean-with-interactive-rebase/fixup_create-fix-commit@2x.png){:\n.shadow.medium.center}\n\n{: .note.text-center}\n\n\nEnfin, la troisième étape consiste à démarrer la session de *Git rebase\ninteractive*. Nous sélectionnons à nouveau le commit parent de notre mauvais\ncommit comme point de départ :\n\n\n```\n\n$ git rebase -i 0023cddd --autosquash\n\n```\n\n\nEt pour conclure, nous utilisons notre botte secrète : `--autosquash`. Cette\noption nous assure de ne rien avoir à faire au sein de la fenêtre d’édition\ndésormais ouverte. Regardons de plus près la situation :\n\n\n![Notre commit de correction est marqué « fixup » et classé à la bonne\nposition](https://about.gitlab.com/images/blogimages/how-to-keep-your-git-history-clean-with-interactive-rebase/fixup_editor@2x.png){:\n.shadow.medium.center}\n\n{: .note.text-center}\n\n\nGit a automatiquement effectué deux choses :\n\n\n1. Le commit de correction de fortune est marqué comme « fixup ». \n\n2. L'ordre des lignes fait apparaître notre commit de correction directement\nsous le mauvais commit. Tout comme « squash », « fixup » combine le commit\navec celui de la ligne supérieure.\n\n\nEnfin, il ne nous reste plus qu'à sauvegarder et à fermer la fenêtre\nd’édition.\n\n\nJetons un coup d'œil à l'historique des commits :\n\n\n![Problème\nrésolu](https://about.gitlab.com/images/blogimages/how-to-keep-your-git-history-clean-with-interactive-rebase/fixup_final-corrected@2x.png){:\n.shadow.medium.center}\n\n{: .note.text-center}\n\n\nAinsi, le mauvais commit initial contient maintenant les changements du\ncommit de secours. Mais en plus de cela, le commit de secours a maintenant\ndisparu de l’historique de commits. Tout beau, tout propre, comme s'il n'y\navait jamais eu le moindre problème !\n\n\n## Découvrez la puissance du rebase interactif\n\n\nVous allez pouvoir utiliser le Git rebase interactive dans de très nombreux\ncas, la plupart du temps afin de corriger des erreurs. Pour une vue\nd'ensemble de toutes les choses utiles à faire avec le rebase interactif,\nnous vous recommandons ce [guide sur\nGit](https://git-scm.com/book/fr/v2/Utilitaires-Git-R%C3%A9%C3%A9crire-l%E2%80%99historique).\n\n\n## FAQ sur le rebase interactif\n\n\n### Quelle est la différence entre rebase et merge ?\n\n\nVoilà une question souvent posée par les développeurs : rebase ou merge ?\nCes commandes permettent d'effectuer des changements d'une branche à\nl'autre. Avec `git merge`, nous créons un commit de merge dans la branche\nlocale. Avec `git rebase`, chaque commit de la branche locale est recréé en\npointe de la branche principale. `Git rebase -i` interactif est similaire à\ngit rebase, mais permet en plus de modifier les commits au moment de les\nenvoyer vers la branche principale.\n\n\n### Quelle est la différence entre le Git rebase interactive et le Git\nrebase ?\n\n\nLorsque l'on ajoute l'option interactive au Git rebase, cela permet d'ouvrir\nune fenêtre d’édition afin d'éditer en amont chaque commit de votre branche\nlocale avant de les rebaser, notamment pour nettoyer votre historique. Les\ncommandes principales sont `reword` (éditer un message de commit), `squash`\n(fusionner deux commits), et `fixup` (amender un commit).\n\n\n### Quelles sont les erreurs à éviter avec le rebase interactif ?\n\n\nLe rebase interactif est généralement conseillé aux utilisateurs plutôt\navancés. Lorsque vous utilisez ces commandes, veillez à éviter les pièges\nsuivants :\n\n\n- __Ordre des commits.__ Conservez la logique du workflow lorsque vous\nréordonnez des commits.\n\n- __Sauvegarde.__ N'oubliez pas de sauvegarder et fermer votre fenêtre\nd'édition en fin de session de rebase interactif.\n\n- __Rebasing sur la branche principale.__ Le rebase s'applique toujours à\ndes commits de votre branche locale vers la branche publique. \n\n\nImage de couverture par David Taljat sur\n[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,154,159],{"text":150,"config":151},"Application Security Testing",{"href":152,"dataGaName":153,"dataGaLocation":43},"/solutions/application-security-testing/","Application security testing",{"text":155,"config":156},"Sécurité de la chaîne d'approvisionnement logicielle",{"href":157,"dataGaLocation":43,"dataGaName":158},"/fr-fr/solutions/supply-chain/","Software supply chain security",{"text":160,"config":161},"Software Compliance",{"href":162,"dataGaName":160,"dataGaLocation":43},"/solutions/software-compliance/",{"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},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758208064/dzl0dbift9xdizyelkk4.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},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":435,"config":440},{"src":441,"dataGaName":438,"dataGaLocation":433},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.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,"titleMobile":457,"button":458,"config":463,"_id":465,"_type":29,"_source":31,"_file":466,"_stem":467,"_extension":34},"/shared/fr-fr/banner","La plateforme GitLab Duo Agent est maintenant disponible en version bêta publique !",{"text":459,"config":460},"Essayer la version bêta",{"href":461,"dataGaName":462,"dataGaLocation":43},"/fr-fr/gitlab-duo/agent-platform/","duo banner",{"layout":464},"release","content:shared:fr-fr:banner.yml","shared/fr-fr/banner.yml","shared/fr-fr/banner",{"_path":469,"_dir":37,"_draft":6,"_partial":6,"_locale":7,"data":470,"_id":676,"_type":29,"title":677,"_source":31,"_file":678,"_stem":679,"_extension":34},"/shared/fr-fr/main-footer",{"text":471,"source":472,"edit":478,"contribute":483,"config":488,"items":493,"minimal":667},"Git est une marque déposée de Software Freedom Conservancy et notre utilisation de « GitLab » est sous licence",{"text":473,"config":474},"Afficher le code source de la page",{"href":475,"dataGaName":476,"dataGaLocation":477},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":479,"config":480},"Modifier cette page",{"href":481,"dataGaName":482,"dataGaLocation":477},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":484,"config":485},"Veuillez contribuer",{"href":486,"dataGaName":487,"dataGaLocation":477},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":489,"facebook":490,"youtube":491,"linkedin":492},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[494,517,571,604,638],{"title":61,"links":495,"subMenu":500},[496],{"text":497,"config":498},"Plateforme DevSecOps",{"href":70,"dataGaName":499,"dataGaLocation":477},"devsecops platform",[501],{"title":204,"links":502},[503,507,512],{"text":504,"config":505},"Voir les forfaits",{"href":206,"dataGaName":506,"dataGaLocation":477},"view plans",{"text":508,"config":509},"Pourquoi choisir GitLab Premium ?",{"href":510,"dataGaName":511,"dataGaLocation":477},"/fr-fr/pricing/premium/","why premium",{"text":513,"config":514},"Pourquoi choisir GitLab Ultimate ?",{"href":515,"dataGaName":516,"dataGaLocation":477},"/fr-fr/pricing/ultimate/","why ultimate",{"title":518,"links":519},"Solutions",[520,525,528,530,535,540,544,547,550,555,557,559,561,566],{"text":521,"config":522},"Transformation digitale",{"href":523,"dataGaName":524,"dataGaLocation":477},"/fr-fr/topics/digital-transformation/","digital transformation",{"text":526,"config":527},"Sécurité et conformité",{"href":152,"dataGaName":153,"dataGaLocation":477},{"text":137,"config":529},{"href":120,"dataGaName":121,"dataGaLocation":477},{"text":531,"config":532},"Développement agile",{"href":533,"dataGaName":534,"dataGaLocation":477},"/fr-fr/solutions/agile-delivery/","agile delivery",{"text":536,"config":537},"Transformation cloud",{"href":538,"dataGaName":539,"dataGaLocation":477},"/fr-fr/topics/cloud-native/","cloud transformation",{"text":541,"config":542},"SCM",{"href":134,"dataGaName":543,"dataGaLocation":477},"source code management",{"text":124,"config":545},{"href":126,"dataGaName":546,"dataGaLocation":477},"continuous integration & delivery",{"text":176,"config":548},{"href":178,"dataGaName":549,"dataGaLocation":477},"value stream management",{"text":551,"config":552},"GitOps",{"href":553,"dataGaName":554,"dataGaLocation":477},"/fr-fr/solutions/gitops/","gitops",{"text":189,"config":556},{"href":191,"dataGaName":192,"dataGaLocation":477},{"text":194,"config":558},{"href":196,"dataGaName":197,"dataGaLocation":477},{"text":199,"config":560},{"href":201,"dataGaName":202,"dataGaLocation":477},{"text":562,"config":563},"Formation",{"href":564,"dataGaName":565,"dataGaLocation":477},"/fr-fr/solutions/education/","education",{"text":567,"config":568},"Services financiers",{"href":569,"dataGaName":570,"dataGaLocation":477},"/fr-fr/solutions/finance/","financial services",{"title":209,"links":572},[573,575,577,579,582,584,588,590,592,594,596,598,600,602],{"text":221,"config":574},{"href":223,"dataGaName":224,"dataGaLocation":477},{"text":226,"config":576},{"href":228,"dataGaName":229,"dataGaLocation":477},{"text":231,"config":578},{"href":233,"dataGaName":234,"dataGaLocation":477},{"text":236,"config":580},{"href":238,"dataGaName":581,"dataGaLocation":477},"docs",{"text":259,"config":583},{"href":261,"dataGaName":5},{"text":585,"config":586},"Histoires de réussite client",{"href":587,"dataGaLocation":477},"/customers/",{"text":254,"config":589},{"href":256,"dataGaName":257,"dataGaLocation":477},{"text":263,"config":591},{"href":265,"dataGaName":266,"dataGaLocation":477},{"text":276,"config":593},{"href":278,"dataGaName":279,"dataGaLocation":477},{"text":268,"config":595},{"href":270,"dataGaName":271,"dataGaLocation":477},{"text":281,"config":597},{"href":283,"dataGaName":284,"dataGaLocation":477},{"text":286,"config":599},{"href":288,"dataGaName":289,"dataGaLocation":477},{"text":291,"config":601},{"href":293,"dataGaName":294,"dataGaLocation":477},{"text":296,"config":603},{"href":298,"dataGaName":299,"dataGaLocation":477},{"title":314,"links":605},[606,608,610,612,614,616,618,622,627,629,631,633],{"text":321,"config":607},{"href":323,"dataGaName":316,"dataGaLocation":477},{"text":326,"config":609},{"href":328,"dataGaName":329,"dataGaLocation":477},{"text":334,"config":611},{"href":336,"dataGaName":337,"dataGaLocation":477},{"text":339,"config":613},{"href":341,"dataGaName":342,"dataGaLocation":477},{"text":344,"config":615},{"href":346,"dataGaName":347,"dataGaLocation":477},{"text":349,"config":617},{"href":351,"dataGaName":352,"dataGaLocation":477},{"text":619,"config":620},"Sustainability",{"href":621,"dataGaName":619,"dataGaLocation":477},"/sustainability/",{"text":623,"config":624},"Diversité, inclusion et appartenance (DIB)",{"href":625,"dataGaName":626,"dataGaLocation":477},"/fr-fr/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":354,"config":628},{"href":356,"dataGaName":357,"dataGaLocation":477},{"text":364,"config":630},{"href":366,"dataGaName":367,"dataGaLocation":477},{"text":369,"config":632},{"href":371,"dataGaName":372,"dataGaLocation":477},{"text":634,"config":635},"Déclaration de transparence sur l'esclavage moderne",{"href":636,"dataGaName":637,"dataGaLocation":477},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"title":374,"links":639},[640,643,645,647,652,657,662],{"text":641,"config":642},"Échanger avec un expert",{"href":52,"dataGaName":53,"dataGaLocation":477},{"text":383,"config":644},{"href":385,"dataGaName":386,"dataGaLocation":477},{"text":388,"config":646},{"href":390,"dataGaName":391,"dataGaLocation":477},{"text":648,"config":649},"Statut",{"href":650,"dataGaName":651,"dataGaLocation":477},"https://status.gitlab.com/","status",{"text":653,"config":654},"Conditions d'utilisation",{"href":655,"dataGaName":656},"/terms/","terms of use",{"text":658,"config":659},"Déclaration de confidentialité",{"href":660,"dataGaName":661,"dataGaLocation":477},"/fr-fr/privacy/","privacy statement",{"text":663,"config":664},"Préférences en matière de cookies",{"dataGaName":665,"dataGaLocation":477,"id":666,"isOneTrustButton":106},"cookie preferences","ot-sdk-btn",{"items":668},[669,671,674],{"text":653,"config":670},{"href":655,"dataGaName":656,"dataGaLocation":477},{"text":672,"config":673},"Politique de confidentialité",{"href":660,"dataGaName":661,"dataGaLocation":477},{"text":663,"config":675},{"dataGaName":665,"dataGaLocation":477,"id":666,"isOneTrustButton":106},"content:shared:fr-fr:main-footer.yml","Main Footer","shared/fr-fr/main-footer.yml","shared/fr-fr/main-footer",[681],{"_path":682,"_dir":683,"_draft":6,"_partial":6,"_locale":7,"content":684,"config":688,"_id":690,"_type":29,"title":691,"_source":31,"_file":692,"_stem":693,"_extension":34},"/en-us/blog/authors/tobias-gnther","authors",{"name":18,"config":685},{"headshot":686,"ctfId":687},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749659488/Blog/Author%20Headshots/gitlab-logo-extra-whitespace.png","Tobias-Gnther",{"template":689},"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":695,"_dir":37,"_draft":6,"_partial":6,"_locale":7,"header":696,"eyebrow":697,"blurb":698,"button":699,"secondaryButton":703,"_id":705,"_type":29,"title":706,"_source":31,"_file":707,"_stem":708,"_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":700},{"href":701,"dataGaName":48,"dataGaLocation":702},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/","feature",{"text":50,"config":704},{"href":52,"dataGaName":53,"dataGaLocation":702},"content:shared:fr-fr:next-steps.yml","Next Steps","shared/fr-fr/next-steps.yml","shared/fr-fr/next-steps",1758326285310]