{"title":"Working with Git and GitHub","version":"5.2","locale":"pl","docname":"internals/contributing/writing-code/working-with-git","url":"/pl/5.2/internals/contributing/writing-code/working-with-git/","canonical":"https://djangodocs.dev/pl/5.2/internals/contributing/writing-code/working-with-git/","summary":"This section explains how the community can contribute code to Django via pull requests. If you’re interested in how mergers handle them, see Committing code .…","html":"<h1>Working with Git and GitHub<a class=\"heading-anchor\" href=\"#working-with-git-and-github\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>This section explains how the community can contribute code to Django via pull\nrequests. If you’re interested in how <a class=\"reference internal\" href=\"/pl/5.2/internals/organization/#mergers-team\"><span class=\"std std-ref\">mergers</span></a> handle\nthem, see <a class=\"reference internal\" href=\"/pl/5.2/internals/contributing/committing-code/\"><span class=\"doc\">Committing code</span></a>.</p>\n<p>Below, we are going to show how to create a GitHub pull request containing the\nchanges for Trac ticket #xxxxx. By creating a fully-ready pull request, you\nwill make the reviewer’s job easier, meaning that your work is more likely to\nbe merged into Django.</p>\n<p>You could also upload a traditional patch to Trac, but it’s less practical for\nreviews.</p>\n<section id=\"installing-git\">\n<h2>Instalacja Gita<a class=\"heading-anchor\" href=\"#installing-git\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Django uses <a class=\"reference external\" href=\"https://git-scm.com/\">Git</a> for its source control. You can <a class=\"reference external\" href=\"https://git-scm.com/download\">download</a> Git, but it’s often easier to install with\nyour operating system’s package manager.</p>\n<p>Django’s <a class=\"reference external\" href=\"https://github.com/django/django/\">Git repository</a> is hosted on <a class=\"reference external\" href=\"https://github.com/\">GitHub</a>, and it is recommended\nthat you also work using GitHub.</p>\n<p>After installing Git, the first thing you should do is set up your name and\nemail:</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>Note that <code class=\"docutils literal notranslate\"><span class=\"pre\">user.name</span></code> should be your real name, not your GitHub nick. GitHub\nshould know the email you use in the <code class=\"docutils literal notranslate\"><span class=\"pre\">user.email</span></code> field, as this will be\nused to associate your commits with your GitHub account.</p>\n</section>\n<section id=\"setting-up-local-repository\">\n<h2>Setting up local repository<a class=\"heading-anchor\" href=\"#setting-up-local-repository\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>When you have created your GitHub account, with the nick „GitHub_nick”, and\n<a class=\"reference external\" href=\"https://github.com/django/django/fork\">forked Django’s repository</a>,\ncreate a local copy of your fork:</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>This will create a new directory „django”, containing a clone of your GitHub\nrepository. The rest of the git commands on this page need to be run within the\ncloned directory, so switch to it now:</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>Your GitHub repository will be called „origin” in Git.</p>\n<p>You should also set up <code class=\"docutils literal notranslate\"><span class=\"pre\">django/django</span></code> as an „upstream” remote (that is, tell\ngit that the reference Django repository was the source of your fork of it):</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>You can add other remotes similarly, for example:</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>Working on a ticket<a class=\"heading-anchor\" href=\"#working-on-a-ticket\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>When working on a ticket, create a new branch for the work, and base that work\non <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>The -b flag creates a new branch for you locally. Don’t hesitate to create new\nbranches even for the smallest things - that’s what they are there for.</p>\n<p>If instead you were working for a fix on the 1.4 branch, you would do:</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>Assume the work is carried on the ticket_xxxxx branch. Make some changes and\ncommit them:</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>When writing the commit message, follow the <a class=\"reference internal\" href=\"/pl/5.2/internals/contributing/committing-code/#committing-guidelines\"><span class=\"std std-ref\">commit message\nguidelines</span></a> to ease the work of the merger. If you’re\nuncomfortable with English, try at least to describe precisely what the commit\ndoes.</p>\n<p>If you need to do additional work on your branch, commit as often as\nnecessary:</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>Publishing work<a class=\"heading-anchor\" href=\"#publishing-work\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>You can publish your work on GitHub by running:</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>When you go to your GitHub page, you will notice a new branch has been created.</p>\n<p>If you are working on a Trac ticket, you should mention in the ticket that\nyour work is available from branch ticket_xxxxx of your GitHub repo. Include a\nlink to your branch.</p>\n<p>Note that the above branch is called a „topic branch” in Git parlance. You are\nfree to rewrite the history of this branch, by using <code class=\"docutils literal notranslate\"><span class=\"pre\">git</span> <span class=\"pre\">rebase</span></code> for\nexample. Other people shouldn’t base their work on such a branch, because\ntheir clone would become corrupt when you edit commits.</p>\n<p>There are also „public branches”. These are branches other people are supposed\nto fork, so the history of these branches should never change. Good examples\nof public branches are the <code class=\"docutils literal notranslate\"><span class=\"pre\">main</span></code> and <code class=\"docutils literal notranslate\"><span class=\"pre\">stable/A.B.x</span></code> branches in the\n<code class=\"docutils literal notranslate\"><span class=\"pre\">django/django</span></code> repository.</p>\n<p>When you think your work is ready to be pulled into Django, you should create\na pull request at GitHub. A good pull request means:</p>\n<ul class=\"simple\">\n<li><p>commits with one logical change in each, following the\n<a class=\"reference internal\" href=\"/pl/5.2/internals/contributing/writing-code/coding-style/\"><span class=\"doc\">coding style</span></a>,</p></li>\n<li><p>well-formed messages for each commit: a summary line and then paragraphs\nwrapped at 72 characters thereafter – see the <a class=\"reference internal\" href=\"/pl/5.2/internals/contributing/committing-code/#committing-guidelines\"><span class=\"std std-ref\">committing guidelines</span></a> for more details,</p></li>\n<li><p>documentation and tests, if needed – actually tests are always needed,\nexcept for documentation changes.</p></li>\n</ul>\n<p>The test suite must pass and the documentation must build without warnings.</p>\n<p>Once you have created your pull request, you should add a comment in the\nrelated Trac ticket explaining what you’ve done. In particular, you should note\nthe environment in which you ran the tests, for instance: „all tests pass\nunder SQLite and MySQL”.</p>\n<p>Pull requests at GitHub have only two states: open and closed. The merger who\nwill deal with your pull request has only two options: merge it or close it.\nFor this reason, it isn’t useful to make a pull request until the code is ready\nfor merging – or sufficiently close that a merger will finish it themselves.</p>\n</section>\n<section id=\"rebasing-branches\">\n<h3>Rebasing branches<a class=\"heading-anchor\" href=\"#rebasing-branches\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>In the example above, you created two commits, the „Fixed ticket_xxxxx” commit\nand „Added two more tests” commit.</p>\n<p>We do not want to have the entire history of your working process in your\nrepository. Your commit „Added two more tests” would be unhelpful noise.\nInstead, we would rather only have one commit containing all your work.</p>\n<p>To rework the history of your branch you can squash the commits into one by\nusing interactive rebase:</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>The HEAD~2 above is shorthand for two latest commits. The above command\nwill open an editor showing the two commits, prefixed with the word „pick”.</p>\n<p>Change „pick” on the second line to „squash” instead. This will keep the\nfirst commit, and squash the second commit into the first one. Save and quit\nthe editor. A second editor window should open, so you can reword the\ncommit message for the commit now that it includes both your steps.</p>\n<p>You can also use the „edit” option in rebase. This way you can change a single\ncommit, for example to fix a typo in a docstring:</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>If your topic branch is already published at GitHub, for example if you’re\nmaking minor changes to take into account a review, you will need to force-push\nthe changes:</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>-f<span class=\"w\"> </span>origin<span class=\"w\"> </span>ticket_xxxxx\n</code></pre></div>\n<p>Note that this will rewrite history of ticket_xxxxx - if you check the commit\nhashes before and after the operation at GitHub you will notice that the commit\nhashes do not match anymore. This is acceptable, as the branch is a topic\nbranch, and nobody should be basing their work on it.</p>\n</section>\n<section id=\"after-upstream-has-changed\">\n<h3>After upstream has changed<a class=\"heading-anchor\" href=\"#after-upstream-has-changed\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>When upstream (<code class=\"docutils literal notranslate\"><span class=\"pre\">django/django</span></code>) has changed, you should rebase your work. To\ndo this, use:</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>The work is automatically rebased using the branch you forked on, in the\nexample case using <code class=\"docutils literal notranslate\"><span class=\"pre\">upstream/main</span></code>.</p>\n<p>The rebase command removes all your local commits temporarily, applies the\nupstream commits, and then applies your local commits again on the work.</p>\n<p>If there are merge conflicts, you will need to resolve them and then use <code class=\"docutils literal notranslate\"><span class=\"pre\">git</span>\n<span class=\"pre\">rebase</span> <span class=\"pre\">--continue</span></code>. At any point you can use <code class=\"docutils literal notranslate\"><span class=\"pre\">git</span> <span class=\"pre\">rebase</span> <span class=\"pre\">--abort</span></code> to return\nto the original state.</p>\n<p>Note that you want to <em>rebase</em> on upstream, not <em>merge</em> the upstream.</p>\n<p>The reason for this is that by rebasing, your commits will always be <em>on\ntop of</em> the upstream’s work, not <em>mixed in with</em> the changes in the upstream.\nThis way your branch will contain only commits related to its topic, which\nmakes squashing easier.</p>\n</section>\n<section id=\"after-review\">\n<h3>After review<a class=\"heading-anchor\" href=\"#after-review\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>It is unusual to get any non-trivial amount of code into core without changes\nrequested by reviewers. In this case, it is often a good idea to add the\nchanges as one incremental commit to your work. This allows the reviewer to\neasily check what changes you have done.</p>\n<p>In this case, do the changes required by the reviewer. Commit as often as\nnecessary. Before publishing the changes, rebase your work. If you added two\ncommits, you would 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>rebase<span class=\"w\"> </span>-i<span class=\"w\"> </span>HEAD~2\n</code></pre></div>\n<p>Squash the second commit into the first. Write a commit message along the lines\nof:</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>Finally, push your work back to your GitHub repository. Since you didn’t touch\nthe public commits during the rebase, you should not need to force-push:</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>Your pull request should now contain the new commit too.</p>\n<p>Note that the merger is likely to squash the review commit into the previous\ncommit when committing the code.</p>\n</section>\n</section>\n<section id=\"working-on-a-patch\">\n<h2>Working on a patch<a class=\"heading-anchor\" href=\"#working-on-a-patch\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>One of the ways that developers can contribute to Django is by reviewing\npatches. Those patches will typically exist as pull requests on GitHub and\ncan be easily integrated into your local repository:</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>This will create a new branch and then apply the changes from the pull request\nto it. At this point you can run the tests or do anything else you need to\ndo to investigate the quality of the patch.</p>\n<p>For more detail on working with pull requests see the\n<a class=\"reference internal\" href=\"/pl/5.2/internals/contributing/committing-code/#handling-pull-requests\"><span class=\"std std-ref\">guidelines for mergers</span></a>.</p>\n</section>\n<section id=\"summary\">\n<h2>Podsumowanie<a class=\"heading-anchor\" href=\"#summary\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<ul class=\"simple\">\n<li><p>Work on GitHub if you can.</p></li>\n<li><p>Announce your work on the Trac ticket by linking to your GitHub branch.</p></li>\n<li><p>When you have something ready, make a pull request.</p></li>\n<li><p>Make your pull requests as good as you can.</p></li>\n<li><p>When doing fixes to your work, use <code class=\"docutils literal notranslate\"><span class=\"pre\">git</span> <span class=\"pre\">rebase</span> <span class=\"pre\">-i</span></code> to squash the commits.</p></li>\n<li><p>When upstream has changed, do <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":"Instalacja Gita","anchor":"installing-git","children":[]},{"title":"Setting up local repository","anchor":"setting-up-local-repository","children":[]},{"title":"Working on a ticket","anchor":"working-on-a-ticket","children":[{"title":"Publishing work","anchor":"publishing-work","children":[]},{"title":"Rebasing branches","anchor":"rebasing-branches","children":[]},{"title":"After upstream has changed","anchor":"after-upstream-has-changed","children":[]},{"title":"After review","anchor":"after-review","children":[]}]},{"title":"Working on a patch","anchor":"working-on-a-patch","children":[]},{"title":"Podsumowanie","anchor":"summary","children":[]}],"breadcrumbs":[{"docname":"internals/index","title":"Dokumentacja wewnętrzna Django","url":"/pl/5.2/internals/"},{"docname":"internals/contributing/index","title":"Wkład w rozwój Django","url":"/pl/5.2/internals/contributing/"},{"docname":"internals/contributing/writing-code/index","title":"Contributing code","url":"/pl/5.2/internals/contributing/writing-code/"}],"prev":{"docname":"internals/contributing/writing-code/unit-tests","title":"Unit tests","url":"/pl/5.2/internals/contributing/writing-code/unit-tests/"},"next":{"docname":"internals/contributing/writing-code/coding-style","title":"Coding style","url":"/pl/5.2/internals/contributing/writing-code/coding-style/"},"formats":{"html":"/pl/5.2/internals/contributing/writing-code/working-with-git/","markdown":"/pl/5.2/internals/contributing/writing-code/working-with-git.md","json":"/pl/5.2/internals/contributing/writing-code/working-with-git.json"},"source":"https://github.com/django/django/blob/stable/5.2.x/docs/internals/contributing/writing-code/working-with-git.txt","official":"https://docs.djangoproject.com/pl/5.2/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"],"inLocales":["en","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}