Boost your productivity & automate tasks when working with GitHub, all from the comfort of your CLI.
npm install gh---
> Boost your productivity & automate tasks when working with GitHub, all from the comfort of your CLI.
Getting Started
- Install
- Usage
- Config
- Plugins
- Contributing
Available Commands
Pull Requests
pr
- --info - Get information about a pull request
- --list - List pull requests
- --fetch - Rebase or Merge pull request into new branch
- --comment - Comment on a pull request
- --fwd - Forward a pull request to another reviewer
- --open | --close - Open or Close a pull request
- --submit - Open or Close a pull request
- --browser - Open GitHub pull request page in the browser
Issues
is
- --new - Create new issues
- --comment - Comment on an issue of a repository
- --list - List issues on a repository
- --open | --close - Open or Close an issue
- --browser - Open GitHub issue page in the browser
- --lock - Lock GitHub issue
- --search - Search issues in current repository
- --assign - Assign an issue on a repository to a user
Repos
re
- --browser - Open the GitHub repository page in the browser
- --list - List repos
- --create - Create a new GitHub repository and clone on the current directory
- --fork - Fork a GitHub repository
- --delete - Delete a repository of specified user
- --clone - Clone a repository
- --label --new - Create or delete a label for a repository
- --label --delete - Delete a label for a repository
- --label --list - List labels for a repository
- --label --update - Update a label for a repository
- --search - Find repositories via various criteria
Gists
gi
- --browser - Open a Gist in the browser
- --list - List user's gists
- --create - Create new gists
- --fork - Fork a gist
- --delete - Delete a gist
User
us
- --login - Automates saving user name & developer token credentials to your ~/.gh.json config
- --logout - Automates removing user name & developer token credentials from your ~/.gh.json config
- --whoami - Prints the user name from ~/.gh.json to your console
Notifications
nt
- --latest - Display the latest activities on a repository
- --list - Watch for any activity on repository
Milestones
ms
- --list - List milestones for a specific repo
Alias
al
- --add - Add a shell-like alias for users
- --remove - Remove alias
- --list - List aliases for a specific repo
General
- History
- License
- Demonstration
- Supported Node Versions
```
npm install -g gh
- Most commands require you to use a developer key
- We automate the process for you the first time you run a command
- Instructions on manually adding a developer key for extra security
Simple example: _list prs for current repo_
``
gh pr
Huge thanks goes to these wonderful people (emoji key):
This project follows the all-contributors specification. Contributions of any kind welcome!
For detailed instructions, check Contributing. Don't miss the source code reports.
For detailed changelog, check Releases.
We support the node versions that the Node.js organization supports which as of now is Node v6 & up.
Under the hood, we are using @octokit/rest to work with the GitHub API
The method of authentication that we use with octokit, is a personal access token
You have two options here: 1. Run gh which will start the authentication process & generate the token for you automatically - Though they are hidden, the downside of this is having to type your user & pass - Supports 2fa 2. Manually generate your personal token & add it to your ~/.gh.json
``
gh help
List all comands options.
``
gh help --all
List specific command options.
``
gh help
| Option | Usage | Type |
| ------------ | ---------- | --------- |
| --verbose | _Optional_ | Boolean |--insane
| | _Optional_ | Boolean |--no-color
| | _Optional_ | Boolean |--no-hooks
| | _Optional_ | Boolean |
The verbose flag is useful for debugging issues.
The insane flag is a more complete verbose flag, which leaks more privacy sensitive data by default.
``
gh pull-request
> Alias: gh pr
| Option | Usage | Type |
| ---------------- | ---------- | --------- |
| -u, --user | _Required_ | String |-I
| , --info | _Required_ | Boolean |-n
| , --number | _Required_ | String |-r
| , --repo | _Optional_ | String |-u
| , --user | _Optional_ | String |
Get information about a pull request.
``
gh pr --info 1
| Option | Usage | Type |
| ------------------ | ------------ | ------------------------------------------------------------------ |
| -l, --list | Required | Boolean |-a
| , --all | _Optional_ | Boolean |-O
| , --org | _Optional_ | String |-m
| , --me | _Optional_ | Boolean |-d
| , --detailed | _Optional_ | Boolean |--direction
| | _Optional_ | [asc, desc] |--date
| | _Optional_ | String |-b
| , --branch | _Optional_ | String |--remote
| | _Optional_ | String |-r
| , --repo | _Optional_ | String |--sort
| | _Optional_ | [created, updated, popularity, long-running, complexity] |-S
| , --state | _Optional_ | [open, closed] |-u
| , --user | _Optional_ | String |--link
| | _Optional_ | Boolean |
- user is owner of the repository, it is the authenticated user by default.remote
- is the name of the remote configuration in a git directory, i.e. origin, upstream."pretty_print": false
- Therefore, it only makes sense when this command is run in a git directory.
- To turn off pretty printing of output in a table add to your ~/.gh-json config
- To adjust pagination rules
#### Examples
Shortcut for listing open pull requests for the current repository
``
gh pr
List open pull requests for all branches from all your repositories.
``
gh pr --list --all
List open pull requests for all branches in all repositories belonging to the "github" organization.
``
gh pr --list --all --org github
List open pull requests sent by logged user on current repository.
``
gh pr --list --me
List open pull requests in node-gh/gh repository.
``
gh pr --list --user node-gh --repo gh
List open pull requests with link and content.
``
gh pr --list --detailed
List open pull requests for a branch.
``
gh pr --list --branch master
List open pull requests and sort them by popularity _(comment count)_.
``
gh pr --list --sort popularity
List open pull requests and sort them by asc long-running _(old but still active)_.
``
gh pr --list --sort long-running --direction asc
List open pull requests and sort them by complexity _(complexity is calculated based on number of additions, deletions, changed files, comments and review comments)_.
``
gh pr --list --sort complexity
List open pull requests with their link
``
gh pr --list --link
List open pull requests with a formatted date (_Any string that the moment library's formatter accepts should work: https://momentjs.com/docs/#/displaying/format/_).
``
gh pr --list --date "dddd, MMMM Do YYYY, h:mm:ss a"
| Option | Usage | Type |
| ---------------- | ------------ | --------- |
| -f, --fetch | Required | Boolean |-M
| , --merge | Required | Boolean |-R
| , --rebase | Required | Boolean |-n
| , --number | _Optional_ | Number |-b
| , --branch | _Optional_ | String |--draft
| | _Optional_ | Boolean |--remote
| | _Optional_ | String |-r
| , --repo | _Optional_ | String |-u
| , --user | _Optional_ | String |
Omitting --number will try to guess the pull number from branch name e.g. pr-1 results in --number 1. Omitting --branch will merge or rebase into config.default_branch.
#### Examples
Shortcut for fetching pull request and checkout into a new branch pr-1.
``
gh pr 1
Merge or rebase pull request into a local branch.
``
gh pr 1 --fetch --merge
``
gh pr 1 --fetch --rebase
Merge or rebase pull request into branch dev.
``
gh pr 1 --fetch --rebase --branch dev
``
gh pr 1 --fetch --merge --branch dev
| Option | Usage | Type |
| ----------------- | ------------ | -------- |
| -c, --comment | Required | String |-n
| , --number | Required | Number |--remote
| | _Optional_ | String |-r
| , --repo | _Optional_ | String |-u
| , --user | _Optional_ | String |
#### Examples
Comment on a pull request.
``
gh pr 1 --comment "Merged, thank you!"
Submit a pull request using your default editor by passing an empty --comment
``
gh pr 1 --comment
| Option | Usage | Type |
| ---------------- | ------------ | -------- |
| --fwd | Required | String |-n
| , --number | Required | Number |
Omitting a value for --fwd fallbacks to the default_pr_forwarder key found
in your config file.
#### Examples
Forward a pull request to another reviewer.
``
gh pr 1 --fwd username
| Option | Usage | Type |
| ---------------- | ------------ | --------- |
| -o, --open | Required | Boolean |-C
| , --close | Required | Boolean |-n
| , --number | Required | Number |--remote
| | _Optional_ | String |-r
| , --repo | _Optional_ | String |-u
| , --user | _Optional_ | String |
#### Examples
Open a pull request.
``
gh pr 1 --open
Close a pull request.
``
gh pr 1 --close
Close multiple pull requests.
``
gh pr --close --number 1 --number 2
Open multiple pull requests.
``
gh pr --open --number 1 --number 2
Open or close a pull request that you've sent to someone.
``
gh pr 1 --close --user eduardolundgren
| Option | Usage | Type |
| --------------------- | ------------ | -------- |
| -s, --submit | Required | String |-b
| , --branch | _Optional_ | String |-D
| , --description | _Optional_ | String |-i
| , --issue | _Optional_ | Number |-r
| , --repo | _Optional_ | String |-t
| , --title | _Optional_ | String |
Omitting a value for --submit fallbacks to the default_pr_reviewer key found--title
in your config file. Omitting will submit a pull request
using the last commit message as title.
#### Examples
Submit a pull request using the current branch to the repository owner or organization.
``
gh pr --submit eduardolundgren --title 'Fix #32' --description 'Awesome fix'
Submit a pull request using your default editor by passing an empty --title and or --description
``
gh pr --submit eduardolundgren --title --description
Submit a pull request using the current branch to dev branch.
``
gh pr --submit eduardolundgren --branch dev
Submit a pull request from a issue.
``
gh pr --submit eduardolundgren --issue 150
Submit a pull request in draft state.
``
gh pr --submit eduardolundgren --draft
| Option | Usage | Type |
| ----------------- | ------------ | --------- |
| -B, --browser | Required | Boolean |-n
| , --number | Required | Number |-u
| , --user | _Optional_ | String |-r
| , --repo | _Optional_ | String |
#### Examples
Open GitHub pull request page in the browser.
``
gh pr 100 --browser
``
gh notification
> Alias: gh nt
| Option | Usage | Type |
| ---------------- | ------------ | --------- |
| -l, --latest | Required | Boolean |--remote
| | _Optional_ | String |-r
| , --repo | _Optional_ | String |-u
| , --user | _Optional_ | String |--date
| | _Optional_ | String |
#### Examples
Shortcut for displaying the latest activities on the current repository.
``
gh nt
Display the latest activities on a certain repository.
``
gh nt --latest --user eduardolundgren --repo node-gh
Diplay notifications with a formatted date (_Any string that the moment library's formatter accepts should work: https://momentjs.com/docs/#/displaying/format/_).
``
gh nt --date "dddd, MMMM Do YYYY, h:mm:ss a"
| Option | Usage | Type |
| --------------- | ------------ | --------- |
| -w, --watch | Required | Boolean |--remote
| | _Optional_ | String |-r
| , --repo | _Optional_ | String |-u
| , --user | _Optional_ | String |
#### Examples
Watch for any activity on the current repository.
``
gh nt --watch
Watch for any activity on a certain repository.
``
gh nt --watch --user eduardolundgren --repo node-gh
``
gh issue
> Alias: gh is
| Option | Usage | Type |
| ------------------ | ------------ | --------- |
| -N, --new | Required | Boolean |-t
| , --title | Required | String |-A
| , --assignee | _Optional_ | String |-L
| , --labels | _Optional_ | String |-m
| , --message | _Optional_ | String |--remote
| | _Optional_ | String |-r
| , --repo | _Optional_ | String |-u
| , --user | _Optional_ | String |
#### Examples
Shortcut for creating a new issue on the current repository.
``
gh is 'Node GH rocks!' 'Body with Markdown support'
Create a new issue using your default editor by passing an empty --message (_also works with an empty title_)
``
gh is --new --title 'Node GH rocks!' --message
Create a new issue on a certain repository.
``
gh is --new --title 'Node GH rocks!' --message 'Body with Markdown support' --user eduardolundgren --repo node-gh
Create a new issue with labels.
``
gh is --new --title 'Node GH rocks!' --labels bug,question,test
Create a new issue and assign it to someone.
``
gh is --new --title 'Node GH rocks!' --assignee zenorocha
| Option | Usage | Type |
| ----------------- | ------------ | -------- |
| -c, --comment | Required | String |-n
| , --number | Required | Number |--remote
| | _Optional_ | String |-r
| , --repo | _Optional_ | String |-u
| , --user | _Optional_ | String |
#### Examples
Comment on an issue of the current repository.
``
gh is 1 --comment 'Node GH rocks!'
Comment on an issue using your default editor by passing an empty --comment (_also works with an empty title_)
``
gh is 1 --comment
Comment on an issue of a certain repository.
``
gh is 1 --comment 'Node GH rocks!' --user eduardolundgren --repo node-gh
| Option | Usage | Type |
| ---------------- | ------------ | --------- |
| -o, --open | Required | Boolean |-C
| , --close | Required | Boolean |-n
| , --number | Required | Number |--remote
| | _Optional_ | String |-r
| , --repo | _Optional_ | String |-u
| , --user | _Optional_ | String |
#### Examples
Open an issue.
``
gh is 1 --open
Close an issue.
``
gh is 1 --close
Close multiple issues.
``
gh is --close --number 1 --number 2
Open multiple issues.
``
gh is --open --number 1 --number 2
Open or close an issue that you've sent to someone.
``
gh is 1 --close --user eduardolundgren
| Option | Usage | Type |
| ------------------- | ------------ | -------------------- |
| -l, --list | Required | Boolean |-a
| , --all | _Optional_ | Boolean |-A
| , --assignee | _Optional_ | String |--date
| | _Optional_ | String |-d
| , --detailed | _Optional_ | Boolean |-L
| , --labels | _Optional_ | String |-M
| , --milestone | _Optional_ | [Number, String] |--remote
| | _Optional_ | String |-r
| , --repo | _Optional_ | String |-S
| , --state | _Optional_ | [open, closed] |-u
| , --user | _Optional_ | String |
- To adjust pagination rules
#### Examples
Shortcut for listing all issues on the current repository.
``
gh is
List all issues from all repositories.
``
gh is --list --all
List issues assigned to someone.
``
gh is --list --assignee zenorocha
List issues with link and content.
``
gh is --list --detailed
List only closed issues on the current repository.
``
gh is --list --state closed
List issues with a formatted date (_Any string that the moment library's formatter accepts should work: https://momentjs.com/docs/#/displaying/format/_).
``
gh is --list --date "dddd, MMMM Do YYYY, h:mm:ss a"
List issues filtered by milestone title.
``
gh is --list --milestone "milestone title"
List issues that contains labels todo and bug.
``
gh is --list --labels todo,bug
List all issues on a certain repository.
``
gh is --list --user eduardolundgren --repo node-gh
| Option | Usage | Type |
| ----------------- | ------------ | --------- |
| -B, --browser | Required | Boolean |-n
| , --number | Required | Number |-u
| , --user | _Optional_ | String |-r
| , --repo | _Optional_ | String |
#### Examples
Shortcut for opening GitHub issue page in the browser.
``
gh is 100
Open GitHub issue page in the browser.
``
gh is 100 --browser
| Option | Usage | Type |
| ---------------- | ------------ | ----------------------------------------------- |
| --lock | Required | Boolean |--lock-reason
| | _Optional_ | [off-topic, too heated, resolved, spam] |-n
| , --number | Required | Number |--remote
| | _Optional_ | String |-r
| , --repo | _Optional_ | String |-u
| , --user | _Optional_ | String |
#### Examples
Lock issue on the current repository.
``
gh is 1 --lock
Lock issue on the current repository with a reason.
``
gh is 1 --lock --lock-reason resolved
| Option | Usage | Type |
| ------------------ | ------------ | --------- |
| -s, --search | Required | Boolean |-a
| , --all | _Optional_ | Boolean |-d
| , --detailed | _Optional_ | Boolean |-r
| , --repo | _Optional_ | String |-u
| , --user | _Optional_ | String |
#### Examples
Search issues in current repository
``
gh is --search 'term'
Search issues in all repositories for a user
``
gh is --all --user node-gh --search 'term'
Search issues in a repository for a user
``
gh is --user node-gh --repo gh --search 'term'
Search issues in a repository for a user with link and content
``
gh is --user node-gh --repo gh --search 'term'
Search issues with github filters
``
gh is --user node-gh --repo gh --search 'updated:<=2013-05-24'
| Option | Usage | Type |
| ------------------ | ------------ | --------- |
| --assign | Required | Boolean |-A
| , --assignee | Required | String |-n
| , --number | Required | Number |-r
| , --repo | _Optional_ | String |-u
| , --user | _Optional_ | String |
#### Examples
Assign an issue on the current repository to a user.
``
gh is --assign --assignee zenorocha --number 1
Assign an issue on a specific repository to a user.
``
gh is --assign --assignee zenorocha --number 1 --user eduardolundgren --repo gh
``
gh repo
> Alias: gh re
| Option | Usage | Type |
| ----------------- | ------------ | --------- |
| -B, --browser | Required | Boolean |-u
| , --user | _Optional_ | String |-r
| , --repo | _Optional_ | String |
#### Examples
Shortcut for opening the GitHub repository page in the browser.
``
gh re
Open GitHub repository page in the browser.
``
gh re --browser --user eduardolundgren --repo node-gh
| Option | Usage | Type |
| ------------------ | ------------ | ----------------------------------------------- |
| -l, --list | Required | Boolean |-d
| , --detailed | _Optional_ | Boolean |-u
| , --user | _Optional_ | String |-t
| , --type | _Optional_ | [all, owner, public, private, member] |--date
| | _Optional_ | String |
#### Examples
List all repositories.
``
gh re --list
List all private repositories.
``
gh re --list --type private
List all repositories from someone.
``
gh re --list --user zenorocha
List open repositories with a formatted date (_Any string that the moment library's formatter accepts should work: https://momentjs.com/docs/#/displaying/format/_).
``
gh re --list --detailed --date "dddd, MMMM Do YYYY, h:mm:ss a"
| Option | Usage | Type |
| ---------------------- | ------------ | ----------- |
| -N, --new | Required | String |-O
| , --organization | _Optional_ | String |-c
| , --clone | _Optional_ | Boolean |-t
| , --type | _Optional_ | [private] |--init
| | _Optional_ | Boolean |--gitignore
| | _Optional_ | String |--homepage
| | _Optional_ | String |--description
| | _Optional_ | String |
#### Examples
Create a new GitHub repository and clone on the current directory.
``
gh re --new foo --clone
Create a new GitHub repository based on the name of the current directory & init with a README
``
gh re --new --clone --init
Create a new GitHub repository for an organization.
``
gh re --new foo --organization node-gh
Create a new GitHub repository using .gitignore template for Ruby.
``
gh re --new gemified --gitignore Ruby
Create a new private repository on GitHub, initializing it with a initial commit of the README.
``
gh re --new foo --init --type private
| Option | Usage | Type |
| ---------------------- | ------------ | -------- |
| -f, --fork | Required | String |-u
| , --user | Required | String |-O
| , --organization | _Optional_ | String |
#### Examples
Fork a GitHub repository.
``
gh re --fork repo --user user
Fork a GitHub repository into the node-gh organization.
``
gh re --fork repo --user user --organization node-gh
| Option | Usage | Type |
| ---------------- | ------------ | -------- |
| -D, --delete | Required | String |-u
| , --user | Required | String |
#### Example
Delete a repository of the logged user.
``
gh re --delete foo
| Option | Usage | Type |
| ---------------------- | ------------ | -------- |
| -c, --clone | Required | String |-r
| , --repo | Required | String |-O
| , --organization | _Optional_ | String |-P
| , --protocol | _Optional_ | String |-u
| , --user | _Optional_ | String |
> If you have custom ssh config, you can add "api": { "ssh_host": "custom-name", ... } to your .gh.json file.
#### Examples
Clone a repository.
``
gh re --clone --repo gh
Clone a repository from a specific user using HTTPS protocol.
``
gh re --clone --user eduardolundgren --repo gh --protocol https
| Option | Usage | Type |
| ---------------------- | ------------ | --------- |
| -C, --color | Required | String |-L
| , --label | Required | Boolean |-N
| , --new | Required | String |-r
| , --repo | Required | String |-O
| , --organization | _Optional_ | String |-u
| , --user | _Optional_ | String |
#### Examples
Create a label for a repository (_color is a hex code with or without literal hex symbol_).
``
gh re --label --new bug --color '#7057ff' --repo gh
Create a label for a user's repository.
``
gh re --label --new bug --color '#7057ff' --user eduardolundgren --repo gh
| Option | Usage | Type |
| ---------------------- | ------------ | --------- |
| -L, --label | Required | Boolean |-D
| , --delete | Required | String |-r
| , --repo | Required | String |-O
| , --organization | _Optional_ | String |-u
| , --user | _Optional_ | String |
#### Examples
Delete a label from a repository.
``
gh re --label --delete bug --repo gh
Delete a label from a user's repository.
``
gh re --label --delete bug --user eduardolundgren --repo gh
| Option | Usage | Type |
| ---------------------- | ------------ | --------- |
| -L, --label | Required | Boolean |-l
| , --list | Required | Boolean |-r
| , --repo | Required | String |-O
| , --organization | _Optional_ | String |-u
| , --user | _Optional_ | String |
#### Examples
List labels for a repository.
``
gh re --label --list --repo gh
List labels for a user's repository.
``
gh re --label --list --user eduardolundgren --repo gh
| Option | Usage | Type |
| ---------------------- | ------------ | --------- |
| -C, --color | Required | String |-L
| , --label | Required | Boolean |-r
| , --repo | Required | String |-U
| , --update | Required | String |-O
| , --organization | _Optional_ | String |-u
| , --user | _Optional_ | String |
#### Examples
Update a label for a repository (_color is a hex code with or without literal hex symbol_).
``
gh re --label --update bug --color color --repo gh
Update a label for a user's repository.
``
gh re --label --update bug --color color --user eduardolundgren --repo gh
Find repositories via various criteria. Repository search looks through the projects you have access to on GitHub.
You can filter the results using GitHub's search qualifiers.
Examples:
| Option | Usage | Type |
| ---------------------- | ------------ | ----------------------------------------------- |
| -s, --search | Required | Boolean |-d
| , --detailed | _Optional_ | Boolean |-u
| , --user | _Optional_ | String |-r
| , --repo | _Optional_ | String |-O
| , --organization | _Optional_ | String |-t
| , --type | _Optional_ | [all, owner, public, private, member] |
#### Examples
Search private repositories you have access to with the term "secret".
``
gh re --search secret --type private
OR
``
gh re --search secret is:private
Matches repositories from GitHub org showing detailed results.
``
gh re --detailed -o github --search octocat
OR
``
gh re --detailed --search octocat org:github
``
gh gists
> Alias: gh gi
| Option | Usage | Type |
| ----------------- | ------------ | --------- |
| -B, --browser | Required | Boolean |-u
| , --user | _Optional_ | String |-i
| , --id | _Optional_ | String |
#### Examples
Shortcut for opening your Gists in the browser.
``
gh gi
Open a Gist in the browser.
``
gh gi --browser --id 5991877
| Option | Usage | Type |
| -------------- | ------------ | --------- |
| -l, --list | Required | Boolean |-u
| , --user | _Optional_ | String |--date
| | _Optional_ | String |
#### Examples
List all gists.
``
gh gi --list
List all gists from someone.
``
gh gi --list --user brunocoelho
List gists with a formatted date (_Any string that the moment library's formatter accepts should work: https://momentjs.com/docs/#/displaying/format/_).
``
gh gi --list --date "dddd, MMMM Do YYYY, h:mm:ss a"
| Option | Usage | Type |
| --------------------- | ------------ | --------- |
| -N, --new | Required | String |-c
| , --content | _Optional_ | String |-d
| , --description | _Optional_ | String |-p
| , --private | _Optional_ | Boolean` |
#### Examples