Open pull requests from the command line.
Shell
Switch branches/tags
Nothing to show
Clone or download
caarlos0 Merge pull request #16 from kemenaran/patch-1
Improve detection of the target branch
Latest commit 759f21b Mar 8, 2017

README.md

open-pr Build Status

Open pull requests from command line.

gif showing open-pr in action

What it does

Basically, when you call git open-pr, the function will verify if you are working on a fork (by convention, you have an upstream remote), then, it will open your browser in the correct URL so you can just hit the Create Pull Request button.

The function also accepts one argument, in case you want to specify another target branch (instead of master, which is the convention).

URL breakdown:

https://github.com/target-remote/repo/compare/master...origin:random-feature
          |           |            |    |        |   |    |     |
          |           |            |    |        |   |    |      -> the branch
          |           |            |    |        |   |    |         you want
          |           |            |    |        |   |    |         to submit
          |           |            |    |        |   |    |
          |           |            |    |        |   |     -> will appear only
          |           |            |    |        |   |        if you are
          |           |            |    |        |   |        working in a fork
          |           |            |    |        |   |
          |           |            |    |        |    -> default GitHub compare
          |           |            |    |        |       thing
          |           |            |    |        |
          |           |            |    |         -> target branch
          |           |            |    |
          |           |            |     -> default GitHub endpoint to open a PR
          |           |            |
          |           |             -> the target repository, also from origin
          |           |                or upstream remotes
          |           |
          |            -> can be both origin or upstream
          |
           -> default host

Usage

For example, when you work on your own project:

$ git remote -v
origin  git@github.com:caarlos0/open-pr.git (fetch)
origin  git@github.com:caarlos0/open-pr.git (push)

$ git branch
* master

$ git checkout -b random-feature
$ touch this-file-is-important
$ git add -A
$ git commit -m 'did some stuff'
$ git push
$ git open-pr
# will browse https://github.com/caarlos0/open-pr/compare/master...random-feature

Working on a fork:

$ git remote -v
origin  git@github.com:random-user/open-pr.git (fetch)
origin  git@github.com:random-user/open-pr.git (push)
upstream  git@github.com:caarlos0/open-pr.git (fetch)
upstream  git@github.com:caarlos0/open-pr.git (push)

$ git branch
* master

$ git checkout -b random-feature
$ touch this-file-is-important
$ git add -A
$ git commit -m 'did some stuff'
$ git push
$ git open-pr
# will browse https://github.com/caarlos0/open-pr/compare/master...random-user:random-feature

Previous example, but to a develop branch, for instance:

$ git open-pr develop
# will browse https://github.com/caarlos0/open-pr/compare/develop...random-user:random-feature

Install using antibody

$ antibody bundle caarlos0/open-pr kind:path

Usage

Just hit git open-pr on your repositories.

You can also alias it:

$ git config --global alias.pr open-pr
$ git pr

But I like the following approach more:

gpr() {
  git push origin HEAD && git open-pr "$@"
}

So I can git push and git open-pr in a single, three letters command:

$ gpr

Contributing

The project is linted with Shellcheck and have unit tests. Please, take a look at them and execute ./build.sh to make sure it all works well. 🍻