GitHub Protips: Tips, tricks, hacks, and secrets from Luke Hefson
With Luke Hefson’s many different roles at GitHub, he’s learned about tons of hacks and protips that he can’t wait to share with you.
This is a part of a series of posts featuring protips from GitHubbers for improving productivity, efficiency, and more.
Hey yo!
At one time during my career at GitHub I was lucky enough to work on a project called Paper Cuts. During that time I had lots of wonderful users reach out to me about how they use GitHub. I discovered a ton of existing hacks and protips for using the website that I didn’t yet know—as well as some great ideas that we ended up working on that were really cool, if not a little low-key. Here are some of those existing tips, paper cut solutions, and newer features that we hope you love.
Issue template config options
Perfecting the planning and tracking process on GitHub can make all the difference between “oh gawd how can I possibly triage all of the things” and “I can actually bear to look at my open source projects.”
We’ve got a bunch of cool new things in store for you in the planning and tracking space coming soon, but in the meantime, here are some cool things you can do using the issue template config to make sure that issues coming into your repositories are concise and helpful. Some fantastic projects such as VS Code, Homebrew, and React are already using them.
- Help to further highlight your repository’s CONTRIBUTING.md file (so that contributors find it hard to ignore!) by adding it as a contact link from the issue template chooser.
- Got a #wontfix that still gets slammed by requests? Further highlight that too.
- You can do all kinds of cool automation with query parameters. And for those of you who’d like to add a row in the issue template chooser that automatically assigns a new issue to a project board or milestone, you could create a contact link that goes to something like this:
https://github.com/my-org/my-repo/issues/new?template=template-name.md&projects=my-org/1&milestone=my-milestone
- If you have multiple repositories for the same overarching project, you can also use contact links to direct users to the right repository and turn off the blank issues option to ensure that they don’t drop one into the wrong place.
- In fact, if you want to discontinue any new issues in your repository, but you’d like to preserve old issues without having to turn issues off altogether, you can turn off blank issues and use a single contact link to redirect all new inquiries to the old issues.
A plethora of deep links
One day I’m going to sit down and write my magnum opus, “The Art of Deep Linking on GitHub”, but until that day, here are a few ways you can use IDs hidden within GitHub to share a link with someone that goes directly to the most-relevant content:
- Not exactly a big secret, but you can deep link to any heading on any rendered markdown file on GitHub by clicking the
link
icon. This is great for sharing a specific section of a README.
- Did you know that you can force pagination on a conversation thread by appending
?timeline_per_page=1
to an issue or pull request URL? This is helpful if you only want to present the first comment in an issue or pull request, allowing the person you shared the link with to expand for more info if they need to—especially since some people can’t help but comment. 😂 - Combining my love of issue template configuration and deep linking (wow, I am a sad man), here’s a nice hack for adding a deep link to an ID that comes just after the last comment in an issue’s timeline. This means you can link straight to the comment box for a single issue which people could say “thank you” on. Just append
#partial-timeline
to an Issue URL. It also works for deep linking to a pull request’s merge box.
Other links for sharing
The following are some little-known search queries that I find super useful.
- You can use
@me
to share search queries that resolve to the current user and combine that with different code review states. This is great for sharing with the rest of your team so that everyone can check in on their own progress. - Sometimes a keyword search across the contents of all issues and pull requests can return too many results. Scope it down by just searching for an issue or pull request’s title using
in:title
. - Forgot what kind of interaction you had with an issue or pull request? I use
involves:@me
ALL. THE. TIME.
Commenting fun
I loved Lee’s must-have Markdown formatting tips from a previous post. A couple of extra ones that I like are:
- Adding a simple, nicely-styled line between chunks of text with
---
. I find this useful when I want to make a few unrelated points in the same comment thread without having to drop a new comment (and therefore new notifications to anyone watching). I just drop in a line between points in the same comment. - Often overlooked, if you have write access to a repository, you can create a new issue from a comment by clicking on the comment’s kebab icon and selecting
Reference in new issue
. GitHub even automatically pre-fills the placeholder text with a reference to the issue comment and who originally posted it!
It’s so much fun to share these with you. I hope you find some use out of them. Stay groovy! 👋
Do you have a GitHub Protip?
Do you have a tip, trick, or hack that makes your daily life easier on GitHub? Share it with us on social media with #GitHubProtips.
Tags:
Written by
Related posts
Boost your CLI skills with GitHub Copilot
Want to know how to take your terminal skills to the next level? Whether you’re starting out, or looking for more advanced commands, GitHub Copilot can help us explain and suggest the commands we are looking for.
Beginner’s guide to GitHub: Setting up and securing your profile
As part of the GitHub for Beginners guide, learn how to improve the security of your profile and create a profile README. This will let you give your GitHub account a little more personality.
Beginner’s guide to GitHub: Merging a pull request
As part of the GitHub for Beginners guide, learn how to merge pull requests. This will enable you to resolve conflicts when they arise.