{"title":"Travailler avec Git et GitHub","version":"6.0","locale":"fr","docname":"internals/contributing/writing-code/working-with-git","url":"/fr/6.0/internals/contributing/writing-code/working-with-git/","canonical":"https://djangodocs.dev/fr/6.0/internals/contributing/writing-code/working-with-git/","summary":"Cette section explique comment la communauté peur contribuer au code de Django au travers de requêtes de contribution (« pull requests »). SI vous vous intéressez à…","html":"<h1>Travailler avec Git et GitHub<a class=\"heading-anchor\" href=\"#working-with-git-and-github\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Cette section explique comment la communauté peur contribuer au code de Django au travers de requêtes de contribution (« pull requests »). SI vous vous intéressez à la manière dont les <a class=\"reference internal\" href=\"/fr/6.0/internals/organization/#mergers-team\"><span class=\"std std-ref\">fusionneurs</span></a> les gèrent, consultez <a class=\"reference internal\" href=\"/fr/6.0/internals/contributing/committing-code/#handling-pull-requests\"><span class=\"std std-ref\">Gestion des requêtes de contribution</span></a>.</p>\n<p>Nous allons montrer ci-dessous comment créer une requête de contribution GitHub contenant les modifications pour un ticket Trac #xxxxx. En créant une requête de contribution totalement complète, vous faciliterez le travail des relecteurs, ce qui augmentera aussi la probabilité de voir votre code intégré dans Django.</p>\n<p>Il est aussi possible de téléverser un correctif traditionnel dans Trac, mais c’est moins pratique pour la relecture.</p>\n<section id=\"installing-git\">\n<h2>Installation de Git<a class=\"heading-anchor\" href=\"#installing-git\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Django utilise <a class=\"reference external\" href=\"https://git-scm.com/\">Git</a> comme système de gestion de version. Vous pouvez <a class=\"reference external\" href=\"https://git-scm.com/download\">télécharger</a> Git, mais il est souvent plus simple de l’installer avec le gestionnaire de paquets de votre système d’exploitation.</p>\n<p>Le <a class=\"reference external\" href=\"https://github.com/django/django/\">dépôt GIt</a> de Django est hébergé sur <a class=\"reference external\" href=\"https://github.com/\">GitHub</a>, et nous vous recommandons aussi de travailler avec GitHub.</p>\n<p>Après l’installation de Git, la première chose à faire est de configurer votre nom et votre courriel :</p>\n<div class=\"code-block\" data-language=\"shell\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code>$<span class=\"w\"> </span>git<span class=\"w\"> </span>config<span class=\"w\"> </span>--global<span class=\"w\"> </span>user.name<span class=\"w\"> </span><span class=\"s2\">&quot;Your Real Name&quot;</span>\n$<span class=\"w\"> </span>git<span class=\"w\"> </span>config<span class=\"w\"> </span>--global<span class=\"w\"> </span>user.email<span class=\"w\"> </span><span class=\"s2\">&quot;you@email.com&quot;</span>\n</code></pre></div>\n<p>Notez que <code class=\"docutils literal notranslate\"><span class=\"pre\">user.name</span></code> devrait être votre nom réel, pas un alias GitHub. GitHub devrait reconnaître le courriel que vous indiquez dans le champ <code class=\"docutils literal notranslate\"><span class=\"pre\">user.email</span></code>, car il sera utilisé pour associer vos commits avec votre compte GitHub.</p>\n</section>\n<section id=\"setting-up-local-repository\">\n<h2>Configuration d’un dépôt local<a class=\"heading-anchor\" href=\"#setting-up-local-repository\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Un fois votre compte GitHub créé, avec le pseudonyme « GitHub_nick », et <a class=\"reference external\" href=\"https://github.com/django/django/fork\">le dépôt Django cloné</a>, créez une copie locale de votre clone :</p>\n<div class=\"code-block\" data-language=\"shell\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code>git<span class=\"w\"> </span>clone<span class=\"w\"> </span>https://github.com/GitHub_nick/django.git\n</code></pre></div>\n<p>Cela va créer un nouveau répertoire <code class=\"docutils literal notranslate\"><span class=\"pre\">django</span></code> contenant un clone de votre dépôt GitHub. Le reste des commandes git de cette page doivent être lancées depuis l’intérieur du dépôt cloné, il faut donc s’y trouver dès maintenant :</p>\n<div class=\"code-block\" data-language=\"shell\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code><span class=\"nb\">cd</span><span class=\"w\"> </span>django\n</code></pre></div>\n<p>Votre dépôt GitHub sera appelé « origin » dans Git.</p>\n<p>Vous devriez aussi configurer django/django` comme cible distante « upstream » (c’est-à-dire indiquer à git que le dépôt Django de référence est la source de votre fourche) :</p>\n<div class=\"code-block\" data-language=\"shell\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code>git<span class=\"w\"> </span>remote<span class=\"w\"> </span>add<span class=\"w\"> </span>upstream<span class=\"w\"> </span>https://github.com/django/django.git\ngit<span class=\"w\"> </span>fetch<span class=\"w\"> </span>upstream\n</code></pre></div>\n<p>D’autres cibles distantes peuvent être ajoutées de la même manière, par exemple :</p>\n<div class=\"code-block\" data-language=\"shell\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code>git<span class=\"w\"> </span>remote<span class=\"w\"> </span>add<span class=\"w\"> </span>akaariai<span class=\"w\"> </span>https://github.com/akaariai/django.git\n</code></pre></div>\n</section>\n<section id=\"working-on-a-ticket\">\n<h2>Travail sur un ticket<a class=\"heading-anchor\" href=\"#working-on-a-ticket\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Lorsque vous travaillez sur un ticket, créez une nouvelle branche dédiée à ce travail en la basant sur <code class=\"docutils literal notranslate\"><span class=\"pre\">upstream/main</span></code>:</p>\n<div class=\"code-block\" data-language=\"shell\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code>git<span class=\"w\"> </span>checkout<span class=\"w\"> </span>-b<span class=\"w\"> </span>ticket_xxxxx<span class=\"w\"> </span>upstream/main\n</code></pre></div>\n<p>L’option <code class=\"docutils literal notranslate\"><span class=\"pre\">-b</span></code> crée une branche locale. N’hésitez pas à créer de nouvelles branches même pour les plus petites choses, elles sont prévues pour ça.</p>\n<p>Si par contre vous travailliez sur une correction dans la branche 1.4, vous auriez écrit :</p>\n<div class=\"code-block\" data-language=\"shell\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code>git<span class=\"w\"> </span>checkout<span class=\"w\"> </span>-b<span class=\"w\"> </span>ticket_xxxxx_1_4<span class=\"w\"> </span>upstream/stable/1.4.x\n</code></pre></div>\n<p>On part du principe que le travail se fait sur la branche ticket_xxxxx. Faites des modifications et validez-les par commit :</p>\n<div class=\"code-block\" data-language=\"shell\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code>git<span class=\"w\"> </span>commit\n</code></pre></div>\n<p>Lors de l’écriture du message de commit, suivez les <a class=\"reference internal\" href=\"/fr/6.0/internals/contributing/committing-code/#committing-guidelines\"><span class=\"std std-ref\">lignes directrices des messages de commit</span></a> pour faciliter le travail avec le fusionneur. Si vous n’êtes pas à l’aise en anglais, essayez au moins de décrire précisément ce que le commit fait.</p>\n<p>Si vous devez continuer de travailler sur votre branche, commitez aussi souvent que nécessaire :</p>\n<div class=\"code-block\" data-language=\"shell\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code>git<span class=\"w\"> </span>commit<span class=\"w\"> </span>-m<span class=\"w\"> </span><span class=\"s1\">&#39;Added two more tests for edge cases.&#39;</span>\n</code></pre></div>\n<section id=\"publishing-work\">\n<h3>Publication de votre travail<a class=\"heading-anchor\" href=\"#publishing-work\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Vous pouvez publier votre travail sur GitHub en exécutant :</p>\n<div class=\"code-block\" data-language=\"shell\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code>git<span class=\"w\"> </span>push<span class=\"w\"> </span>origin<span class=\"w\"> </span>ticket_xxxxx\n</code></pre></div>\n<p>Lorsque vous allez sur votre page GitHub, vous pouvez constater qu’une nouvelle branche a été créée.</p>\n<p>Si vous travaillez à partir d’un ticket Trac, vous devriez mentionner dans le ticket que votre travail est disponible dans la branche ticket_xxxxx de votre dépôt GiHub. Incluez un lien vers votre branche.</p>\n<p>Notez que la branche ci-dessus est appelée une branche thématique (« topic branch ») dans le jargon Git. Vous êtes libre de réécrire l’historique de cette branche, par exemple avec <code class=\"docutils literal notranslate\"><span class=\"pre\">git</span> <span class=\"pre\">rebase</span></code>. D’autres personnes ne devraient pas baser leur travail sur une telle branche, car leur clone serait corrompu dès le moment où vous modifiez des commits.</p>\n<p>Il existe aussi des branches publiques. Ce sont des branches que d’autres personnes sont susceptibles de fourcher, ce qui implique que leur historique ne devrait jamais être altéré. De bons exemples de branches publiques sont les branches <code class=\"docutils literal notranslate\"><span class=\"pre\">main</span></code> et <code class=\"docutils literal notranslate\"><span class=\"pre\">stable/A.B.x</span></code> dans le dépôt <code class=\"docutils literal notranslate\"><span class=\"pre\">django/django</span></code>.</p>\n<p>Lorsque vous pensez que votre travail est prêt à être intégré dans Django, c’est le moment de créer une requête de contribution (pull request) dans GitHub. Une bonne requête de contribution signifie :</p>\n<ul class=\"simple\">\n<li><p>des commits avec chacun son changement logique, respectant le <a class=\"reference internal\" href=\"/fr/6.0/internals/contributing/writing-code/coding-style/\"><span class=\"doc\">style de code</span></a> ;</p></li>\n<li><p>des messages correctement formés pour chaque commit : une ligne de résumé puis des paragraphes de lignes à 72 caractères - consultez les <span class=\"xref std std-ref\">lignes directrices pour les commits</span> pour plus de détails ;</p></li>\n<li><p>de la documentation et des tests, si nécessaire – en réalité, des tests sont toujours nécessaires à l’exception des modifications de documentation.</p></li>\n</ul>\n<p>La suite de tests doit passer et la documentation doit pouvoir être construite sans avertissement.</p>\n<p>Après avoir créà la requête de contribution, vous devriez ajouter un commentaire dans le ticket Trac correspondant en expliquant ce que vous avez fait. En particulier, vous devriez signaler l’environnement dans lequel vous avez lancé les tests, par exemple : « tous les tests passent avec SQLite et MySQL ».</p>\n<p>Les requêtes de contribution de GitHub ont seulement deux états : ouvert et fermé. Le fusionneur qui s’occupera de cette requête n’a que deux options, la fusionner ou la fermer. C’est pour cela qu’il n’est pas utile de créer une requête de contribution avant que le code soit prêt à être fusionné, ou suffisamment proche de l’être pour qu’un fusionneur puisse la terminer lui-même.</p>\n</section>\n<section id=\"editing-commit-messages\">\n<span id=\"id1\"></span><h3>Editing commit messages<a class=\"heading-anchor\" href=\"#editing-commit-messages\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>To change the message of the most recent commit, run:</p>\n<div class=\"code-block\" data-language=\"shell\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code>git<span class=\"w\"> </span>commit<span class=\"w\"> </span>--amend\n</code></pre></div>\n<p>This opens an editor with the current commit message. Edit it, save, and close\nto update the commit.</p>\n<p>To change the message of an earlier commit, use the « reword » option in\ninteractive rebase. For example, to reword one of the last three commits:</p>\n<div class=\"code-block\" data-language=\"shell\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code>git<span class=\"w\"> </span>rebase<span class=\"w\"> </span>-i<span class=\"w\"> </span>HEAD~3\n</code></pre></div>\n<p>This opens an editor listing the three commits, each prefixed with the word\n« pick ». Change « pick » to « reword » (or « r ») on the line of the commit you want\nto change, then save and close. A new editor will open for each commit marked\nas « reword », allowing you to update the message.</p>\n<p>See <a class=\"reference internal\" href=\"/fr/6.0/internals/contributing/committing-code/#committing-guidelines\"><span class=\"std std-ref\">Lignes directrices pour les commits</span></a> for the required commit message format.</p>\n<p>After rewriting a commit that has already been pushed to GitHub, you will need\nto force-push your branch:</p>\n<div class=\"code-block\" data-language=\"shell\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code>git<span class=\"w\"> </span>push<span class=\"w\"> </span>--force-with-lease<span class=\"w\"> </span>origin<span class=\"w\"> </span>ticket_xxxxx\n</code></pre></div>\n</section>\n<section id=\"rebasing-branches\">\n<h3>Rebasage des branches<a class=\"heading-anchor\" href=\"#rebasing-branches\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>In the example above, you created two commits, the « Fixed #xxxxx  – … »\ncommit and the « Added two more tests … » commit.</p>\n<p>Il n’est pas souhaitable d’avoir l’historique complet de votre processus d’avancement dans le dépôt de Django. Le commit « Added two more tests » constituerait un bruit inutile. Il serait donc préférable d’avoir un seul commit contenant l’entier du travail.</p>\n<p>Pour réarranger l’historique de votre branche, vous pouvez fusionner les commits en un seul en utilisant le rebasage interactif :</p>\n<div class=\"code-block\" data-language=\"shell\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code>git<span class=\"w\"> </span>rebase<span class=\"w\"> </span>-i<span class=\"w\"> </span>HEAD~2\n</code></pre></div>\n<p>La syntaxe <code class=\"docutils literal notranslate\"><span class=\"pre\">HEAD~2</span></code> ci-dessus est un raccourci indiquant les deux derniers commits. La commande ci-dessus ouvrira un éditeur affichant ces deux commits, préfixés par le mot « pick ».</p>\n<p>Modifiez « pick » de la deuxième ligne en « squash ». Cela conservera le premier commit et fusionnera le second commit dans le premier. Enregistrez et quittez l’éditeur. Une seconde fenêtre d’éditeur doit apparaître pour que vous puissiez y reformuler le message de commit pour le nouveau commit qui contient maintenant les changements des deux commits précédents.</p>\n<p>Il est aussi possible d’utiliser l’option « edit » dans le rebasage. Cela permet de modifier un seul commit, par exemple pour corriger une faute dans une chaîne de documentation :</p>\n<div class=\"code-block\" data-language=\"shell\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code>git<span class=\"w\"> </span>rebase<span class=\"w\"> </span>-i<span class=\"w\"> </span>HEAD~3\n<span class=\"c1\"># Choose edit, pick, pick for the commits</span>\n<span class=\"c1\"># Now you are able to rework the commit (use git add normally to add changes)</span>\n<span class=\"c1\"># When finished, commit work with &quot;--amend&quot; and continue</span>\ngit<span class=\"w\"> </span>commit<span class=\"w\"> </span>--amend\n<span class=\"c1\"># Reword the commit message if needed</span>\ngit<span class=\"w\"> </span>rebase<span class=\"w\"> </span>--continue\n<span class=\"c1\"># The second and third commits should be applied.</span>\n</code></pre></div>\n<p>Si votre branche thématique est déjà publiée sur GitHub, par exemple si vous faites des changements mineurs pour prendre en compte une relecture, vous aurez besoin de pousser de force les changements :</p>\n<div class=\"code-block\" data-language=\"shell\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code>git<span class=\"w\"> </span>push<span class=\"w\"> </span>--force-with-lease<span class=\"w\"> </span>origin<span class=\"w\"> </span>ticket_xxxxx\n</code></pre></div>\n<p>Notez que cela réécrira l’historique de ticket_xxxxx ; si vous comparez les empreintes des commits avant et après l’opération sur GitHub, vous constaterez que les empreintes des commits ont changé. Ceci est acceptable dans la mesure où il s’agit d’une branche thématique et que personne n’est censé baser son travail sur celle-ci.</p>\n</section>\n<section id=\"after-upstream-has-changed\">\n<h3>Après des changements amont<a class=\"heading-anchor\" href=\"#after-upstream-has-changed\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Lorsque des changements surviennent dans le dépôt amont (upstream, <code class=\"docutils literal notranslate\"><span class=\"pre\">django/django</span></code>), il est nécessaire de rebaser son travail. Pour cela, tapez :</p>\n<div class=\"code-block\" data-language=\"shell\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code>git<span class=\"w\"> </span>fetch<span class=\"w\"> </span>upstream\ngit<span class=\"w\"> </span>rebase<span class=\"w\"> </span>upstream/main\n</code></pre></div>\n<p>Le travail est automatiquement rebasé en utilisant la branche que vous avez clonée, dans ce cas d’exemple <code class=\"docutils literal notranslate\"><span class=\"pre\">upstream/main</span></code>.</p>\n<p>La commande <code class=\"docutils literal notranslate\"><span class=\"pre\">rebase</span></code> supprime temporairement tous vos commits locaux, applique les commits amont, puis applique de nouveau vos commits locaux sur la branche.</p>\n<p>Si des conflits de fusion sont détectés, il sera nécessaire de les résoudre, puis de continuer avec <code class=\"docutils literal notranslate\"><span class=\"pre\">git</span> <span class=\"pre\">rebase</span> <span class=\"pre\">--continue</span></code>. À tout moment, vous pouvez écrire <code class=\"docutils literal notranslate\"><span class=\"pre\">git</span> <span class=\"pre\">rebase</span> <span class=\"pre\">--abort</span></code> pour revenir à l’état de départ.</p>\n<p>Notez bien que l’intention est de <em>rebaser</em> sur la branche amont, et non pas <em>fusionner</em> (merge) avec la branche amont.</p>\n<p>La raison de cette intention est qu’en rebasant, vos commits resteront <em>au-dessus</em> des autres commits amont et ne se mélangeront pas avec eux. De cette façon, votre branche ne contiendra que les commits liés à son objectif, ce qui facilitera une éventuelle fusion de ceux-ci.</p>\n</section>\n<section id=\"after-review\">\n<h3>Après la relecture<a class=\"heading-anchor\" href=\"#after-review\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Il est inhabituel de pouvoir pousser une quantité de code non triviale dans le cœur de Django sans procéder à des changements demandés par les relecteurs. Dans ce cas, il est souvent de bon ton d’ajouter les changements sous forme d’un commit suivant vos autres changements. Cela permet au relecteur de visualiser facilement quels sont les changements que vous avez apportés.</p>\n<p>Dans ce cas, effectuez les changements demandés par le relecteur. Créez autant de commits que nécessaire. Avant de publier vos changements, rebasez votre travail. Si votre branche a ajouté deux commits, vous exécuteriez :</p>\n<div class=\"code-block\" data-language=\"shell\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code>git<span class=\"w\"> </span>rebase<span class=\"w\"> </span>-i<span class=\"w\"> </span>HEAD~2\n</code></pre></div>\n<p>Fusionnez le second commit avec le premier. Écrivez un message de commit du genre :</p>\n<div class=\"code-block\" data-language=\"text\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Text</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Text code\"><code>Made changes asked in review by &lt;reviewer&gt;.\n\n- Fixed whitespace errors in foobar.\n- Reworded the docstring of bar().\n</code></pre></div>\n<p>Pour terminer, poussez à nouveau votre travail dans votre dépôt GitHub. Comme vous n’avez pas touché aux commits publics durant le rebasage, il ne devrait pas être nécessaire pousser de force :</p>\n<div class=\"code-block\" data-language=\"shell\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code>git<span class=\"w\"> </span>push<span class=\"w\"> </span>origin<span class=\"w\"> </span>ticket_xxxxx\n</code></pre></div>\n<p>Votre requête de contribution devrait maintenant contenir aussi le ou les nouveaux commits.</p>\n<p>Notez que le fusionneur va probablement fusionner le commit de relecture dans le commit précédent au moment d’intégrer ce travail dans le code principal de Django.</p>\n</section>\n</section>\n<section id=\"working-on-a-patch\">\n<h2>Travail sur un correctif<a class=\"heading-anchor\" href=\"#working-on-a-patch\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>L’une des manières de contribuer à Django par les développeurs est de réviser des correctifs. Ces correctifs se trouvent habituellement sous la forme de requêtes de contribution (pull request) dans GitHub et peuvent facilement être intégrés dans un dépôt local :</p>\n<div class=\"code-block\" data-language=\"shell\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code>git<span class=\"w\"> </span>checkout<span class=\"w\"> </span>-b<span class=\"w\"> </span>pull_xxxxx<span class=\"w\"> </span>upstream/main\ncurl<span class=\"w\"> </span>-L<span class=\"w\"> </span>https://github.com/django/django/pull/xxxxx.patch<span class=\"w\"> </span><span class=\"p\">|</span><span class=\"w\"> </span>git<span class=\"w\"> </span>am\n</code></pre></div>\n<p>Cela va créer une nouvelle branche, puis y appliquer les modifications de la requête de contribution. À ce stade, vous pouvez lancer les tests ou faire tout ce qu’il faut pour examiner la qualité du correctif.</p>\n<p>Pour plus de détails sur le travail avec les requêtes de contribution, consultez <a class=\"reference internal\" href=\"/fr/6.0/internals/contributing/committing-code/#handling-pull-requests\"><span class=\"std std-ref\">les lignes directrices pour les fusionneurs</span></a>.</p>\n</section>\n<section id=\"summary\">\n<h2>Sommaire<a class=\"heading-anchor\" href=\"#summary\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<ul class=\"simple\">\n<li><p>Travaillez avec GitHub si vous le pouvez.</p></li>\n<li><p>Annoncez votre travail sur le ticket Trac en y ajoutant un lien vers votre branche GitHub.</p></li>\n<li><p>Lorsque vous avez du code qui vous semble prêt, créez une requête de contribution (« pull request »).</p></li>\n<li><p>Préparez vos requêtes de contribution aussi bien que vous le pouvez.</p></li>\n<li><p>Lorsque vous appliquez des corrections à votre travail, utilisez <code class=\"docutils literal notranslate\"><span class=\"pre\">git</span> <span class=\"pre\">rebase</span> <span class=\"pre\">-i</span></code> pour fusionner vos commits.</p></li>\n<li><p>Lorsque le code principal amont a changé, faites <code class=\"docutils literal notranslate\"><span class=\"pre\">git</span> <span class=\"pre\">fetch</span> <span class=\"pre\">upstream;</span> <span class=\"pre\">git</span> <span class=\"pre\">rebase</span></code>.</p></li>\n</ul>\n</section>","rootId":"working-with-git-and-github","toc":[{"title":"Installation de Git","anchor":"installing-git","children":[]},{"title":"Configuration d’un dépôt local","anchor":"setting-up-local-repository","children":[]},{"title":"Travail sur un ticket","anchor":"working-on-a-ticket","children":[{"title":"Publication de votre travail","anchor":"publishing-work","children":[]},{"title":"Editing commit messages","anchor":"editing-commit-messages","children":[]},{"title":"Rebasage des branches","anchor":"rebasing-branches","children":[]},{"title":"Après des changements amont","anchor":"after-upstream-has-changed","children":[]},{"title":"Après la relecture","anchor":"after-review","children":[]}]},{"title":"Travail sur un correctif","anchor":"working-on-a-patch","children":[]},{"title":"Sommaire","anchor":"summary","children":[]}],"breadcrumbs":[{"docname":"internals/index","title":"Fonctionnement interne du projet Django","url":"/fr/6.0/internals/"},{"docname":"internals/contributing/index","title":"Contribuer à Django","url":"/fr/6.0/internals/contributing/"},{"docname":"internals/contributing/writing-code/index","title":"Contribution au code","url":"/fr/6.0/internals/contributing/writing-code/"}],"prev":{"docname":"internals/contributing/writing-code/unit-tests","title":"Les tests unitaires","url":"/fr/6.0/internals/contributing/writing-code/unit-tests/"},"next":{"docname":"internals/contributing/writing-code/coding-style","title":"Style de code","url":"/fr/6.0/internals/contributing/writing-code/coding-style/"},"formats":{"html":"/fr/6.0/internals/contributing/writing-code/working-with-git/","markdown":"/fr/6.0/internals/contributing/writing-code/working-with-git.md","json":"/fr/6.0/internals/contributing/writing-code/working-with-git.json"},"source":"https://github.com/django/django/blob/stable/6.0.x/docs/internals/contributing/writing-code/working-with-git.txt","official":"https://docs.djangoproject.com/fr/6.0/internals/contributing/writing-code/working-with-git/","inVersions":["6.1","6.0","5.2","5.1","5.0","4.2","4.1","4.0","3.2","3.1","3.0","2.2","2.1","2.0","1.11","1.10","1.9"],"inLocales":["en","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}