.. _creating pull-requests: ====================== Creating Pull-Requests ====================== .. highlight: bash Example ------- * Create an account on https://github.com * Create a fork of project `pyinstaller/pyinstaller `_ on github. * Set up your git client by following `this documentation on github `_. * Clone your fork to your local machine.:: git clone git@github.com:YOUR_GITHUB_USERNAME/pyinstaller.git cd pyinstaller * Develop your changes (aka "hack") * Create a branch to work on (optional):: git checkout -b my-patch * If you are going to implement a hook, start with creating a minimalistic build-test (see below). You will need to test your hook anyway, so why not use a build-test from the start? * Incorporate your changes into PyInstaller. * Test your changes by running *all* build tests to ensure nothing else is broken. Please test on as many platform as you can. * You may reference relevant issues in commit messages (like #1259) to make GitHub link issues and commits together, and with phrase like “fixes #1259” you can even close relevant issues automatically. * Synchronize your fork with the PyInstaller upstream repository. There are two ways for this: 1. Rebase you changes on the current development head (preferred, as it results in a straighter history and conflicts are easier to solve):: git remote add upstream https://github.com/pyinstaller/pyinstaller.git git checkout my-patch git pull --rebase upstream develop git log --online --graph 2. Merge the current development head into your changes:: git remote add upstream https://github.com/pyinstaller/pyinstaller.git git fetch upstream develop git checkout my-patch git merge upstream/develop git log --online --graph For details see `syncing a fork at github `_. * Push your changes up to your fork:: git push * Open the *Pull Requests* page at https://github.com/YOUR_GITHUB_USERNAME/pyinstaller/pulls and click “New pull request”. That’s it. .. _updating pull-request: Updating a Pull-Request ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ We may ask you to update your pull-request to improve it's quality or for other reasons. In this case, use ``git rebase -i …`` and ``git push -f …`` as explained below. [#]_ Please *do not* close the pull-request and open a new one – this would kill the discussion thread. This is the workflow without actually changing the base:: git checkout my-branch # find the commit your branch forked from 'develop' mb=$(git merge-base --fork-point develop) # rebase interactively without actually changing the base git rebase -i $mb # … process rebase git push -f my-fork my-branch Or if you want to actually base your code on the current development head:: git checkout my-branch # rebase interactively on 'develop' git rebase -i develop # … process rebase git push -f my-fork my-branch .. [#] There are other ways to update a pull-request, e.g. by "amending" a commit. But for casual (and not-so-casual :-) users ``rebase -i`` might be the easiest way. .. include:: ../_common_definitions.txt .. Emacs config: Local Variables: mode: rst ispell-local-dictionary: "american" End: