Skip to main content

Tool for combining GitHub pull requests.

Project description

Tool for combining GitHub pull requests.

License:MPL v2
Documentation:this README


(Recommended) With pipx:

pipx install paul-mclendahand

With pip from PyPI:

pip install paul-mclendahand

With pip from GitHub main branch:

pip install

With pip from a clone of the repository with dev dependencies:

pip install -e '.[dev]'

Quick start

Configure pmac

pmac needs to know the GitHub user and GitHub project.

You can set configuration in the setup.cfg file:


You can override the setup.cfg variables with environment variables:



You can also use a GitHub personal access token. You set it in the PMAC_GITHUB_API_TOKEN environment variable.

For example:

PMAC_GITHUB_API_TOKEN=abcdef0000000000000000000000000000000000 pmac listprs


If you find pmac stops working because it’s getting rate-limited by GitHub, you should use a personal access token.

Using pmac

After you’ve configured git, then you can use pmac like this:

  1. Create a new branch:

    git checkout <MAIN-BRANCH>
    git checkout -b update-prs
  2. List open PRs:

    pmac listprs
  3. Combine some pull requests into it:

    pmac add 5100 5101 5102

    Use the same pull requests numbers as on GitHub.

    Internally, pmac uses git am to apply commits from pull requests. If you hit a git am conflict, pmac will tell you. You can edit the file in another terminal to manually resolve the conflict. Then do:

    git add FILE
    git commit

    After that, you can continue with pmac.

  4. When you’re done, push the branch to GitHub and create a pull request.

    pmac can help with the PR description:

    pmac prmsg

Why does this project exist?

Two main reasons.

First, GitHub doesn’t support combining pull requests. There is a forum post about it here:

Second, dependabot (also owned by GitHub) doesn’t support grouping dependency updates into a single pull request. If you have 50 dependency updates, it creates 50 pull requests (sometimes more!). I have a lot of projects and lack of grouping updates makes monthly maintenance miserable. There’s an issue for this:


2.1.0 (February 7th, 2022)


  • Better handling for git am conflicts. (#22)
  • Better handling for when no changes were applied. pmac add won’t adjust the top-most commit. (#24)

2.0.0 (July 15th, 2021)


  • Rewrote how pmac add works. It no longer needs you to edit your .git/config file. It now uses the GitHub API to fetch the commits for the PRs being added.

    You can remove git_remote related configuration. It’s no longer used.

    You should use GitHub to create an API token and then use that as the value for the PMAC_GITHUB_API_TOKEN. This will fix issues with rate-limiting.



  • Switched to a src/ based project layout and moved requirements into file.

1.2.0 (June 12th, 2020)


  • Added a PMAC_MAIN_BRANCH environment variable and main_branch configuration option which specify the name of the main branch. (#12)

1.1.0 (April 7th, 2020)


  • Added a --git_remote argument, PMAC_GIT_REMOTE environment variable, and git_remote configuration option which, when specified, will cause pmac to use that as the remote name and not guess. (#10)


  • Added a Makefile because that’s how I roll.
  • Tweaked pmac --help so it shows the version and release date and link to issue tracker.
  • Cleaned up README.
  • Made a peanut butter pie and ate it.

1.0.0 (January 14, 2020)

  • Initial writing.

Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

paul-mclendahand-2.1.0.tar.gz (14.1 kB view hashes)

Uploaded source

Built Distribution

paul_mclendahand-2.1.0-py2.py3-none-any.whl (13.1 kB view hashes)

Uploaded py2 py3

Supported by

AWS AWS Cloud computing Datadog Datadog Monitoring Facebook / Instagram Facebook / Instagram PSF Sponsor Fastly Fastly CDN Google Google Object Storage and Download Analytics Huawei Huawei PSF Sponsor Microsoft Microsoft PSF Sponsor NVIDIA NVIDIA PSF Sponsor Pingdom Pingdom Monitoring Salesforce Salesforce PSF Sponsor Sentry Sentry Error logging StatusPage StatusPage Status page