Can you issue pull requests from the command line on GitHub?
Asked Answered
P

12

410

It seems like you have to interact with github.com to initiate a pull request. Is this so?

Playsuit answered 27/10, 2010 at 21:38 Comment(8)
I don't see anything in their API for doing pull requests: develop.github.comArgus
There is now: developer.github.com/v3/pulls/#create-a-pull-requestTerbecki
What operating system are you intending to do this on?Kikelia
How to do this in Windows 8 or 10?Dingy
I created a bash script for this, if anybody is interested.Veal
Related: Some good details on how the pull requests are different in Git (the software) and GitHub (the web service)Globin
See the new cli/cli in my answer belowDrainage
In April 2020, that would be gh pr create --fill. See [my edited answer below](https://mcmap.net/q/86275/-can-you-issue-pull-requests-from-the-command-line-on-githubDrainage
U
144

UPDATE: The hub command is now an official github project and also supports creating pull requests

ORIGINAL:

Seems like a particularly useful thing to add to the hub command: http://github.com/defunkt/hub or the github gem: http://github.com/defunkt/github-gem

I suggest filing an issue with those projects asking for it. The github guys are pretty responsive.

Unfreeze answered 27/10, 2010 at 21:51 Comment(6)
The github-gem included a facility to create pull requests for ages: gh pull-request [user] [branch].Unemployable
Does it work without having Github forked the repo first, ie from a direct clone of the source repo?Peru
@Holger Just and anyone else: That just creates the text of a pull request and does not by-pass the need for an on-Github fork. I have not found a way around that yet. I intend to try the 'pullr' utility posted below soon. See here for the issue of people requesting full pull-request support from the github-gem.Hawk
for fast command using hub : hub pull-request -m "message pull request" -b master -h your_branchLiddy
Don't know why it's not mention in the above docs, but for quick pull request merge, checkout your master branch do hub merge https://github.com/repo/pull/1Knighterrant
is it possible to contextually specify a reviewer?Belfry
S
68

Git now ships with a subcommand 'git request-pull' [-p] <start> <url> [<end>]

You can see the docs here

You may find this useful but it is not exactly the same as GitHub's feature.

Susanasusanetta answered 6/12, 2014 at 19:54 Comment(1)
@NathanBasanese It generates human-readable text describing the pull request. The git docs and GitHub book say to e-mail this to the project maintainer, someone with write privileges on the shared repo (possibly github). The maintainer reviews the pull-request text you sent (rather than using github's online pull-request process). They can do a git pull of the url and branch indicated in your pull request to merge your changes into their local clone and push these changes up to github.Gonnella
A
30

With the Hub command-line wrapper you can link it to git and then you can do git pull-request

From the man page of hub:

   git pull-request [-f] [TITLE|-i ISSUE|ISSUE-URL] [-b BASE] [-h HEAD]
          Opens a pull request on GitHub for the project that the "origin" remote points to. The default head of the pull request is the current branch. Both base and head of the pull request can be explicitly given in one  of  the  following  formats:  "branch",  "owner:branch",
          "owner/repo:branch". This command will abort operation if it detects that the current topic branch has local commits that are not yet pushed to its upstream branch on the remote. To skip this check, use -f.

          If TITLE is omitted, a text editor will open in which title and body of the pull request can be entered in the same manner as git commit message.

          If instead of normal TITLE an issue number is given with -i, the pull request will be attached to an existing GitHub issue. Alternatively, instead of title you can paste a full URL to an issue on GitHub.
Auburn answered 14/8, 2012 at 1:34 Comment(3)
Didn't know about Hub, it is available via homebrew: brew install hub This seems like the correct answer for mac users.Balustrade
// , Is there anywhere online that I could point people to for more information about Hub?Comfrey
More information about the hub command is available here: hub.github.comEosin
G
25

A man search like...

man git | grep pull | grep request

gives

git request-pull <start> <url> [<end>]

But, despite the name, it's not what you want. According to the docs:

Generate a request asking your upstream project to pull changes into their tree. The request, printed to the standard output, begins with the branch description, summarizes the changes and indicates from where they can be pulled.

@HolgerJust mentioned the github cli does what you want:

gh pull-request [user] [branch]

Others have mentioned the official hub package by github:

sudo apt-get install hub

or

brew install hub 

then

hub pull-request [-focp] [-b <BASE>] [-h <HEAD>]
Gonnella answered 18/2, 2011 at 20:21 Comment(5)
This generates a summary of pending changes, it has nothing to do with a pull request that is being issued via GithubAuburn
@Auburn By "This", I assume you mean the git request-pull line. Yea, that makes sense, but I'm surprised git doesn't have a command to e-mail pull-requests like github does. After all, the git config user.email is available to it. Especially with a command named pull-request.Gonnella
For Ubuntu, looks like github-cli is no longer available after Precise...I've opened a question to ask for an alternative.Nervine
What about bitbucket or gitlab? Any command from CLI?Sicken
@Sicken Though it's not a pull request, it's close. On GitLab you can create a new private repository (project) using a normal git client with just a git push -u origin master with a new origin url.Gonnella
D
18

In addition of github/hub, which acts as a proxy to Git, you now (February 2020) have cli/cli:

See "Supercharge your command line experience: GitHub CLI is now in beta"

Create a pull request

Create a branch, make several commits to fix the bug described in the issue, and use gh to create a pull request to share your contribution.

cli/cli pr creation  -- https://static.mcmap.net/file/mcmap/ZG-AbGLDKwfpLS21bC2jaRA/user-images.githubusercontent.com/10404068/74261506-35df4080-4cb0-11ea-9285-c41583009e6c.png?ssl=1

By using GitHub CLI to create pull requests, it also automatically creates a fork when you don’t already have one, and it pushes your branch and creates your pull request to get your change merged.


And in April 2020: "GitHub CLI now supports autofilling pull requests and custom configuration"

GitHub CLI 0.7 is out with several of the most highly requested enhancements from the feedback our beta users have provided.
Since the last minor release, 0.6, there are three main features:

  • Configure gh to use your preferred editor with gh config set editor [editor].
  • Configure gh to default to SSH with gh config set git_protocol ssh.
    The default Git protocol is HTTPS.
  • Autofill the title and body of a pull request from your commits with gh pr create --fill.

So:

gh pr create --fill
Drainage answered 12/2, 2020 at 21:33 Comment(2)
can I specify a reviewer while making the pull request in this way?Belfry
@Belfry From cli.github.com/manual/gh_pr_create, yes, with the option -r, --reviewer <handle> Request reviews from people or teams by their handleDrainage
G
7

I ended up making my own, I find that it works better the other solutions that were around.

https://npmjs.org/package/pullr

Glynisglynn answered 17/3, 2013 at 23:46 Comment(1)
Tried doing pullr -n inside the cloned repository. Gave me an error opening .../clonedRepo/undefined/.pullr-token-cache on windows 7. You might want to have some more documentation - like an example usage?Animosity
N
7

I'm using simple alias to create pull request,

alias pr='open -n -a "Google Chrome" --args "https://github.com/user/repo/compare/pre-master...nawarkhede:$(git_current_branch)\?expand\=1"'
Neotropical answered 9/9, 2019 at 11:12 Comment(1)
Which is not creating a PR, but opens a browser with PR creation page.Naji
F
7

You can install github official CLI to create PR and do other sort of things.

To setup:

gh auth login

To create PR:

gh pr create

To merge:

gh pr merge

Fergus answered 25/8, 2021 at 21:10 Comment(2)
Nobody can use these commands as shown, since you are not specifying the repos or branches operated on. A little more explanation of how to know what account is used in auth login and how to determine what repo the PR is created in (and for what account), etc.Schematism
These are actually full commands. you can run these commands at the root path of the repo and gh will link these commands internally. For gh auth login, you'd be asked which acc. you'd like to login.. it's interactive.Fergus
T
5

I've created a tool recently that does exactly what you want:

https://github.com/jd/git-pull-request

It automates everything in a single command, forking the repo, pushing the PR etc. It also supports updating the PR if you need to edit/fix it!

Telencephalon answered 20/7, 2017 at 8:33 Comment(0)
P
1

I've used this tool before- although it seems like there needs to be an issue open first, it is super useful and really streamlines workflow if you use github issue tracking. git open-pull and then a pull request is submitted from whatever branch you are on or select. https://github.com/jehiah/git-open-pull

EDIT: Looks like you can create issues on the fly, so this tool is a good solution.

Portable answered 4/5, 2012 at 14:57 Comment(0)
C
0

Yes. You can install the hub CLI util.
On MACOS: brew install hub

You need to have one time GitHub token for login.

User -> Dev settings -> Personal tokens -> Generate
(See: https://github.com/settings/tokens)

git checkout -b mybranch
hub pull-request -b master -h mybranch

#user:     your_user_name
#password: your_git_token
Caseworm answered 14/12, 2021 at 17:46 Comment(0)
H
-1

Why not open a browser window for my pull request from the CLI?

Assuming that your CLI can open a browser window with the open command, you can add this git alias to your ~/.gitconfig, and it will open a new browser window for your pull request:

[alias]
    pull-request = "!f() { \
        REPO_NAME=$(basename -s .git `git config --get remote.origin.url`); \
        BRANCH_NAME=$(git rev-parse --abbrev-ref HEAD); \
        URL=\"https://github.com/YOUR_ORGANIZATION/$REPO_NAME/compare/$BRANCH_NAME?expand=1\"; \
        open \"$URL\"; \
    }; f"

just replace YOUR_ORGANIZATION with the name of your organization.

then after you set it up, use: git pull-request

Hoshi answered 29/11, 2023 at 15:23 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.