Update: I added #discuss, so please if anyone of you knows new features of Github CLIs, feel free to comment. Below, I found more cool things I could do with gh
.
Inspiration
GitHub tools are all great, but sometimes, I get exhausted as I’m coding and have to switch from my terminal/text editor to do many clicks in the browser, just to create or view a PR.
Luckily, on March 6th, 2020, GitHub released a new cool GitHub CLI to create PR/ Issue in your local terminal.
In this post, I will go over 1 main command that I usually daily and highly recommend: gh pr <command>
.
Installment
macOS
- Easy Install With brew:
$ brew install github/gh/gh
- Upgrade:
brew update && brew upgrade gh
Windows
Install gh
via Scoop:
scoop bucket add github-gh https://github.com/cli/scoop-gh.git
scoop install gh
Linux
For Linux and other platforms, please refer to this GitHub page for different installment
Normal flow vs. new Github CLI
Old Process of creating a PR:
(feat/login)$ git add .
(feat/login)$ git commit -m "init skeleton code for login"
(feat/login)$ git push origin feat/login
Open Github on browser
Open Github project
Click
Create a PR
Fill the title and body
Now, let's see how many steps when we use gh pr create
:
(feat/login)$ git add .
(feat/login)$ git commit -m "init skeleton code for login"
3.
(feat/login)$ gh pr create
Enumerating objects: 9, done.
Counting objects: 100% (9/9), done.
Delta compression using up to 4 threads
Compressing objects: 100% (5/5), done.
Writing objects: 100% (5/5), 444 bytes | 444.00 KiB/s, done.
Total 5 (delta 4), reused 0 (delta 0)
remote: Resolving deltas: 100% (4/4), completed with 4 local objects.
To github.com:calvinqc/trivin.git
1c179cb..7953ecc HEAD -> gh-testing
Branch 'feat/login' set up to track remote branch 'feat/login' from 'origin'.
Creating pull request for feat/login into master in calvinqc/trivin
? Title [WIP] Login API
? Body <Received>
? What's next? Submit
https://github.com/calvinqc/trivin/pull/1
Options
Source from Github CLIs:
-a, --assignee login Assign people by their login
-B, --base string The branch into which you want your code merged
-b, --body string Supply a body. Will prompt for one otherwise.
-d, --draft Mark pull request as a draft
-f, --fill Do not prompt for title/body and just use commit info
-l, --label name Add labels by name
-m, --milestone name Add the pull request to a milestone by name
-p, --project name Add the pull request to projects by name
-r, --reviewer login Request reviews from people by their login
-t, --title string Supply a title. Will prompt for one otherwise.
-w, --web Open the web browser to create a pull request
Easy 1 line command:
$ gh pr create -t "[WIP] Login API" -b "Init skeleton code for Login API" -r "calvinqc" -l "feat" -p "Roadmap" -B dev
$
If there’s one thing that I love about gh pr create
, it is that it will push + create a PR at the same time.
List all PRs
$ gh pr list
Pull requests for calvinqc/trivin
#2 [WIP] Register API feat/register
#1 [WIP] Login API feat/login
View a PR
$ gh pr view 1
Opening https://github.com/calvinqc/trivin/pull/1 in your browser
Get status of all PRs
$ gh pr status
Relevant pull requests in calvinqc/trivin
Current branch
#1 [WIP] Login API feat/login
- Checks passing
Created by you
#2 [WIP] Register API feat/register
- Checks passing
#1 [WIP] Login API feat/login
- Checks passing
Requesting a code review from you
You have no pull requests to review
Checkout a PR
This is very similar to a regular branch checkout, but I don't have to checkout and then pull the code from that branch
$ gh pr checkout 1
Top comments (18)
I was actually trying out the Github CLI today from my Ubuntu distro and it looked pretty cool to me. It gives the relevant info for issues and also PR's on a repo.
I think I can get used to it more than having to go to the browser. Also, I didn't know that
gh pr create
did push AND created the pr on GH, that's sooo cool!Yep, that's why I start to use more
gh pr create
today, doing extra steps on the browser is just too tiredWe don't store our source on github, but.... I do only use command line git commands. I have an advantage doing that over GUI based Git command tools because (as painful as it can get sometimes) I'm forced to learn how Git things. As I move to my opensource projects I will use this article to help me get started, Thanks Calvin.
Sure @john , I'm really glad that could help provide great information for people. :). I know sometimes it's really painful with git, but the more I use and make mistake, the more confident I feel about git. so yeah, let's keep on practicing!
I did't know about this CLI. Very interesting tool, so thanks.
BTW to Linux users out there, you can install
brew
and then this CLI following macOS commands.Thanks for providing
Thanks to you for the post.
It's awesome, I like it but I'd like to have the option to add a reviewer as well 😅
It's already here:
Taken from: cli.github.com/manual/gh_pr_create
Wow that should be new because I was looking for it in the documentation of the first release (which I used) and couldn't find it 😯 thanks Adrian
yeah definitely it's new, I was still on 0.7.0 version and now just updated to 0.11.1
Wow, I think it's new, I tried the beta version, and love to do more with the PR with the CLIs (Compare with other branch instead of the default branch)
Yeah, that tool is awesome isn't it? 🤘
For personal projects, I usually just add the
--fill
flag to pre-fill the title and description with the commits.Nice, thanks for the FYI, learn sth new today! Will use it for my personal project
Step 3 in your "normal flow" example has an error in it - you don't want to push your local branch to master.
lol, dang, I barely use
git push
these days haha. Thanks for reminding!I start using
gh
today! It improves my productivity at a significant level.If you use VSCode, try the official GitHub Pull Requests extension. I have always used it in place of opening the browser.