gh
v2.8.9
Published
Boost your productivity & automate tasks when working with GitHub, all from the comfort of your CLI.
Readme
DEPRECATED
Boost your productivity & automate tasks when working with GitHub, all from the comfort of your CLI.
Table of contents
--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
--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
--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
--browser- Open a Gist in the browser--list- List user's gists--create- Create new gists--fork- Fork a gist--delete- Delete a gist
--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
--latest- Display the latest activities on a repository--list- Watch for any activity on repository
--add- Add a shell-like alias for users--remove- Remove alias--list- List aliases for a specific repo
Install
npm install -g ghUsage
- 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 prContributors
Huge thanks goes to these wonderful people (emoji key):
This project follows the all-contributors specification. Contributions of any kind welcome!
Contributing
For detailed instructions, check Contributing. Don't miss the source code reports.
History
For detailed changelog, check Releases.
License
Demonstration
Supported Node Versions:
We support the node versions that the Node.js organization supports which as of now is Node v6 & up.
Authentication
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
Available commands
gh helpList all comands options.
gh help --allList specific command options.
gh help <command>Global flags
| 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.
Pull requests
gh pull-requestAlias:
gh pr
PR: Info
| 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 1PR: List
| 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 |
useris owner of the repository, it is the authenticated user by default.remoteis the name of the remote configuration in a git directory, i.e. origin, upstream.- 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
"pretty_print": falseto your~/.gh-jsonconfig - To adjust pagination rules
Examples
Shortcut for listing open pull requests for the current repository
gh prList open pull requests for all branches from all your repositories.
gh pr --list --allList open pull requests for all branches in all repositories belonging to the "github" organization.
gh pr --list --all --org githubList open pull requests sent by logged user on current repository.
gh pr --list --meList open pull requests in node-gh/gh repository.
gh pr --list --user node-gh --repo ghList open pull requests with link and content.
gh pr --list --detailedList open pull requests for a branch.
gh pr --list --branch masterList open pull requests and sort them by popularity (comment count).
gh pr --list --sort popularityList open pull requests and sort them by asc long-running (old but still active).
gh pr --list --sort long-running --direction ascList 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 complexityList open pull requests with their link
gh pr --list --linkList 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"PR: Merge or Rebase
| 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 1Merge or rebase pull request into a local branch.
gh pr 1 --fetch --mergegh pr 1 --fetch --rebaseMerge or rebase pull request into branch dev.
gh pr 1 --fetch --rebase --branch devgh pr 1 --fetch --merge --branch devPR: Comment
| 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 --commentPR Forward
| 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 usernamePR: Open or Close
| 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 --openClose a pull request.
gh pr 1 --closeClose multiple pull requests.
gh pr --close --number 1 --number 2Open multiple pull requests.
gh pr --open --number 1 --number 2Open or close a pull request that you've sent to someone.
gh pr 1 --close --user eduardolundgrenPR: Submit
| 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
in your config file. Omitting --title 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 --descriptionSubmit a pull request using the current branch to dev branch.
gh pr --submit eduardolundgren --branch devSubmit a pull request from a issue.
gh pr --submit eduardolundgren --issue 150Submit a pull request in draft state.
gh pr --submit eduardolundgren --draftPR: Open in Browser
| 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 --browserNotifications
gh notificationAlias:
gh nt
Notifications: Latest
| 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 ntDisplay the latest activities on a certain repository.
gh nt --latest --user eduardolundgren --repo node-ghDiplay 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"Notifications: Watch
| 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 --watchWatch for any activity on a certain repository.
gh nt --watch --user eduardolundgren --repo node-ghIssues
gh issueAlias:
gh is
Issue: Create
| 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!' --messageCreate a new issue on a certain repository.
gh is --new --title 'Node GH rocks!' --message 'Body with **Markdown** support' --user eduardolundgren --repo node-ghCreate a new issue with labels.
gh is --new --title 'Node GH rocks!' --labels bug,question,testCreate a new issue and assign it to someone.
gh is --new --title 'Node GH rocks!' --assignee zenorochaIssue: Comment
| 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 --commentComment on an issue of a certain repository.
gh is 1 --comment 'Node GH rocks!' --user eduardolundgren --repo node-ghIssue: Open or Close
| 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 --openClose an issue.
gh is 1 --closeClose multiple issues.
gh is --close --number 1 --number 2Open multiple issues.
gh is --open --number 1 --number 2Open or close an issue that you've sent to someone.
gh is 1 --close --user eduardolundgrenIssue: List
| 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 isList all issues from all repositories.
gh is --list --allList issues assigned to someone.
gh is --list --assignee zenorochaList issues with link and content.
gh is --list --detailedList only closed issues on the current repository.
gh is --list --state closedList 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,bugList all issues on a certain repository.
gh is --list --user eduardolundgren --repo node-ghIssue: Open in Browser
| 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 100Open GitHub issue page in the browser.
gh is 100 --browserIssue: Lock
| 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 --lockLock issue on the current repository with a reason.
gh is 1 --lock --lock-reason resolvedIssue: Search
| 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'Issue: Assign
| 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 1Assign an issue on a specific repository to a user.
gh is --assign --assignee zenorocha --number 1 --user eduardolundgren --repo ghRepo
gh repoAlias:
gh re
Repo: Open in Browser
| 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 reOpen GitHub repository page in the browser.
gh re --browser --user eduardolundgren --repo node-ghRepo: List
| 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 --listList all private repositories.
gh re --list --type privateList all repositories from someone.
gh re --list --user zenorochaList 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"Repo: Create
| 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 --cloneCreate a new GitHub repository based on the name of the current directory & init with a README
gh re --new --clone --initCreate a new GitHub repository for an organization.
gh re --new foo --organization node-ghCreate a new GitHub repository using .gitignore template for Ruby.
gh re --new gemified --gitignore RubyCreate a new private repository on GitHub, initializing it with a initial commit of the README.
gh re --new foo --init --type privateRepo: Fork
| 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 userFork a GitHub repository into the node-gh organization.
gh re --fork repo --user user --organization node-ghRepo: Delete
| Option | Usage | Type |
| ---------------- | ------------ | -------- |
| -D, --delete | Required | String |
| -u, --user | Required | String |
Example
Delete a repository of the logged user.
gh re --delete fooRepo: Clone
| 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 ghClone a repository from a specific user using HTTPS protocol.
gh re --clone --user eduardolundgren --repo gh --protocol httpsRepo: Create Label
| 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 ghCreate a label for a user's repository.
gh re --label --new bug --color '#7057ff' --user eduardolundgren --repo ghRepo: Delete Label
| 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 ghDelete a label from a user's repository.
gh re --label --delete bug --user eduardolundgren --repo ghRepo: List Labels
| 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 ghList labels for a user's repository.
gh re --label --list --user eduardolundgren --repo ghRepo: Update Label
| 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 ghUpdate a label for a user's repository.
gh re --label --update bug --color color --user eduardolundgren --repo ghRepo: Search
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 privateOR
gh re --search secret is:privateMatches repositories from GitHub org showing detailed results.
gh re --detailed -o github --search octocatOR
gh re --detailed --search octocat org:githubGists
gh gistsAlias:
gh gi
Gist: Open in Browser
| 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 giOpen a Gist in the browser.
gh gi --browser --id 5991877Gist: List
| Option | Usage | Type |
| -------------- | ------------ | --------- |
| -l, --list | Required | Boolean |
| -u, --user | Optional | String |
| --date | Optional | String |
Examples
List all gists.
gh gi --listList all gists from someone.
gh gi --list --user brunocoelhoList 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"Gist: Create
| Option | Usage | Type |
| --------------------- | ------------ | --------- |
| -N, --new | Required | String |
| -c, --content | Optional | String |
| -d, --description | Optional | String |
| -p, --private | Optional | Boolean |
