Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
This branch is 134 commits behind Mergifyio:main.

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time


Build Status

git-pull-request is a command line tool to send GitHub or Pagure pull-request from your terminal.


Use the standard Python installation method:

pip3 install git-pull-request

Although it might not be up to date with the latest code on GitHub Fedora 28+ users can also download straight via package manager DNF:

sudo dnf install git-pull-request


You need to write your credentials into your ~/.netrc file. In case you have 2FA enabled for GitHub, make sure to replace your password by a Personal access token:

machine login jd password f00b4r

For Pagure, you need to create an API key by visiting your settings and requesting the Fork a project and Modify an existing project ACLs:

machine login tristanc password $your-api-token

Note: since credentials are stored in plain text, you should encrypt your $HOME directory to improve security.

Once you've made your commits into a branch, just type:

git pull-request

This will:

  1. Fork the upstream repository into your account (if needed)
  2. Add your forked repository as a remote named "github" (if needed)
  3. Force push your current branch to your remote
  4. Create a pull-request for your current branch to the remote matching branch, or master by default.

If you add more commits to your branch later, or need to rebase your branch to edit commits, you'll just need to run git pull-request to update your pull-request. git-pull-request automatically detects that a pull-request has been opened for your current working branch.

Workflow advice

When sending pull-requests, it's preferable to do so from your own branch. You can create your own branch from master by doing:

$ git checkout -b myownbranch --track origin/master

This will checkout a new branch called myownbranch that is a copy of master. Using the --track option makes sure that the upstream source branch is written in your .git/config file. This will allow git-pull-request to know to which branch send the pull-request.

Since this is long to type, you can use an alias in git to make it faster:

$ git config --global alias.nb '!git checkout --track $(git config branch.$(git rev-parse --abbrev-ref HEAD).remote)/$(git rev-parse --abbrev-ref HEAD) -b'

This will create a git nb alias that will create a new branch tracking the current branch and checking it out. You can then use it like that:

$ git nb foobar
Branch foobar set up to track remote branch master from origin.
Switched to a new branch 'foobar'

Difference with hub

The wrapper hub provides hub fork and hub pull-request as command line tools to fork and create pull-requests.

Unfortunately, it's hard to combine these tools in an automated implementation for a complete workflow. For example: If you need to update your pull-request, there's no way to identify existing pull requests, so calling hub pull-request would just open a new pull-request.

git-pull-request wraps all of these operations into one convenient tool.


Send git pull requests via command line



Code of conduct




Sponsor this project



No packages published


  • Python 100.0%