The PullRequestTemplate Guide: Examples, Tips & Free Downloads
February 23, 2026·14 min read·Gitmore Team
A pull request without a description is a code review waiting to fail. The reviewer has no context, no idea what to look for, and no way to verify the change does what it's supposed to do. They end up reading every line of the diff trying to reverse-engineer the intent, which takes three times longer than it should.
PR templates solve this by giving every pull request a consistent structure. Instead of a blank text box, developers get a form with the right prompts: what changed, why, how to test it, and what to watch out for. The result is faster reviews, fewer back-and-forth comments, and a cleaner git history that tools can actually parse.
This guide covers everything: what makes a good PR template, how to set one up on Github, Gitlab, and Bitbucket, ready-to-use templates for different PR types, and free markdown files you can download and drop into your repository today.
Why PR Templates Matter
A PR template is a markdown file that automatically populates the description field when someone opens a new pull request. Instead of starting with a blank box (and the temptation to write "fixed stuff"), the developer sees a structured form with sections to fill in.
The benefits compound across the team:
Faster code reviews: Reviewers immediately understand the context, the scope, and what to focus on. No more guessing why a file was changed.
Consistent documentation: Every PR follows the same structure, making it easy to search through past changes and understand the project history.
Fewer review cycles: When the description includes testing steps and a checklist, reviewers catch issues on the first pass instead of going back and forth.
Better onboarding: New team members learn the team's standards naturally by following the template. No separate documentation needed.
Better automated reports: Tools that generate reports from your git activity (like Gitmore) produce more accurate and useful summaries when PR descriptions are well-structured. The AI has real context to work with instead of empty descriptions.
How to Add a PR Template to Your Repository
The setup is different on each platform, but it always comes down to placing a markdown file in the right location. Here's how to do it on each one.
Github
Github supports PR templates through a special file in your repository. You have three placement options:
.github/pull_request_template.md (recommended)
pull_request_template.md in the repo root
docs/pull_request_template.md
Create the file, add your template content, commit it to your default branch, and every new PR will automatically use it. To set it up:
Github also supports multiple templates. Create a folder at .github/PULL_REQUEST_TEMPLATE/ and add different files like feature.md, bugfix.md, and hotfix.md. Developers can then select the appropriate template when creating a PR using the?template=feature.md query parameter.
Gitlab uses a similar approach but with a different filename. In Gitlab, pull requests are called "Merge Requests," so the template file reflects that:
With multiple templates, Gitlab shows a dropdown when creating a merge request so the developer can pick the right one. Name your files descriptively: Feature.md, Bug Fix.md, Hotfix.md.
You can also set a default template at the project level under Settings > Merge Requests > Default description template.
Bitbucket
Bitbucket Cloud does not have native PR template files like Github and Gitlab. However, there are two ways to achieve the same result:
Default description in repository settings: Go to Repository Settings > Pull Requests > Default description and paste your template there. Every new PR will start with this text.
Bitbucket Server / Data Center: Supports PR templates natively through the .bitbucket/pull_request_template.md file in the repository root, similar to Github.
Regardless of platform, the template content itself is the same. Write it once in markdown, then place it in the right location for your git provider.
Anatomy of a Great PR Template
Not all PR templates are equal. A bad template is just noise that developers will delete or ignore. A good template guides the developer to provide exactly the information a reviewer needs. Here are the essential sections:
1. Description
A concise summary of what this PR does and why. Not a restatement of the ticket title, but actual context. A reviewer should understand the purpose of the change after reading this section alone.
2. Type of Change
A simple checkbox list: new feature, bug fix, refactor, docs, infra, performance. This takes 2 seconds to fill in and immediately tells the reviewer what kind of review is needed. A refactor needs a different eye than a new feature.
3. Changes Made
A bullet list of the specific changes. Not "updated files" but "Added rate limiting middleware to the /api/auth endpoint" and "Increased Redis connection pool from 10 to 25." Specificity saves review time.
4. How to Test
Step-by-step instructions for the reviewer to verify the change works. This is the most underused section in PR templates, and the most valuable. When a reviewer can follow concrete steps, they catch real bugs instead of guessing at edge cases.
5. Checklist
A pre-merge checklist that the author completes before requesting review. This catches common issues before the reviewer even opens the PR: tests passing, no console errors, documentation updated, self-review done.
6. Related Issues
Links to related tickets, issues, or other PRs. On Github, using "Closes #123" or "Fixes #456" will automatically close the issue when the PR is merged. On Gitlab, "Closes #123" works the same way. This keeps your issue tracker in sync with your actual code changes.
Template 1: Standard PR Template
This is your default, all-purpose template. Works for any type of change. Keep this as your main template and use specialized templates for specific scenarios.
## Description
<!-- Provide a clear summary of what this PR does and why. -->
## Type of Change
- [ ] New feature
- [ ] Bug fix
- [ ] Refactoring (no functional changes)
- [ ] Documentation update
- [ ] Infrastructure / CI/CD
- [ ] Performance improvement
## Changes Made
<!-- List the specific changes. Be precise. -->
-
-
-
## How to Test
<!-- Step-by-step instructions for reviewers to verify this works. -->
1.
2.
3.
## Checklist
- [ ] Code follows the project's style guidelines
- [ ] Self-reviewed the code for obvious errors
- [ ] Added or updated tests where applicable
- [ ] Existing tests pass locally
- [ ] Updated documentation if needed
- [ ] No new warnings or console errors introduced
## Related Issues
<!-- Link related tickets or issues. Use "Closes #123" to auto-close. -->
## Screenshots
<!-- If applicable, add screenshots or screen recordings. -->
For new feature work that needs more context: user stories, architecture decisions, API changes, database migrations, and feature flag information. This template is more detailed because feature PRs tend to be larger and have wider impact.
## Feature Description
<!-- What does this feature do? Who is it for? Why is it needed? -->
## User Story
<!-- As a [type of user], I want [goal] so that [reason]. -->
## Type of Change
- [x] New feature
## Implementation Details
<!-- Explain the technical approach and key decisions. -->
### Architecture
<!-- How does this fit into the existing system? -->
### Key Files Changed
| File | Change |
|------|--------|
| | |
## API Changes
| Method | Endpoint | Description |
|--------|----------|-------------|
| | | |
## Database Changes
- [ ] No database changes
- [ ] Migration included and tested
## How to Test
1.
2.
3.
### Edge Cases Considered
-
-
## Checklist
- [ ] Code follows the project's style guidelines
- [ ] Self-reviewed the code
- [ ] Added unit tests for new functionality
- [ ] Added integration tests where applicable
- [ ] Existing tests pass locally
- [ ] Updated documentation
- [ ] Tested on mobile (if UI change)
- [ ] No new warnings or console errors introduced
- [ ] Backwards compatible (or migration plan documented)
## Feature Flag
- [ ] No feature flag needed
- [ ] Behind feature flag: `FLAG_NAME`
## Related Issues
## Screenshots / Demo
## Deployment Notes
<!-- Environment variables, dependencies, ordering? -->
Bug fix PRs need a different structure. The reviewer needs to understand the original bug, the root cause, and why this specific fix is correct. The template includes reproduction steps so the reviewer can verify the fix addresses the actual problem.
## Bug Description
<!-- What was the bug? Expected vs actual behavior. -->
**Expected:**
**Actual:**
## Root Cause
<!-- What caused this bug? Be specific. -->
## Type of Change
- [x] Bug fix
## Fix Description
<!-- What does this PR change to fix the bug? -->
## How to Reproduce (Before Fix)
1.
2.
3.
## How to Verify (After Fix)
1.
2.
3.
## Impact Assessment
- **Severity:** Low / Medium / High / Critical
- **Users affected:** All / Subset (describe)
- **Duration:** Since when was this bug present?
## Regression Risk
<!-- Could this fix break anything else? -->
-
-
## Checklist
- [ ] Root cause identified and documented above
- [ ] Fix addresses the root cause (not just symptoms)
- [ ] Added test to prevent regression
- [ ] Existing tests pass locally
- [ ] Tested the specific reproduction steps
- [ ] No new warnings or console errors introduced
## Related Issues
<!-- Link the bug report. Use "Fixes #123" to auto-close. -->
Hotfixes are urgent. The template is intentionally shorter and focused on what matters in an incident: severity, root cause, the minimal fix, and a rollback plan. No feature flags, no architecture discussions. Fix it, verify it, ship it.
## Hotfix Summary
<!-- One-line description of what this fixes and why it's urgent. -->
## Severity
- [ ] P0 - System down / data loss
- [ ] P1 - Major feature broken for all users
- [ ] P2 - Significant issue affecting subset of users
## Incident
<!-- Link to incident channel, status page, or alert. -->
## Root Cause
<!-- Brief explanation of what went wrong. -->
## Fix
<!-- What does this change? Keep it minimal and focused. -->
## Rollback Plan
- [ ] Safe to revert this commit directly
- [ ] Requires additional steps (describe below)
## Testing
- [ ] Tested locally against the reproduction case
- [ ] Verified on staging (if applicable)
- [ ] Existing tests pass
- [ ] Monitoring dashboards checked
## Checklist
- [ ] Fix is minimal and scoped (no unrelated changes)
- [ ] Another engineer has reviewed this
- [ ] Customer communication sent (if applicable)
- [ ] Post-mortem scheduled
## Related Issues
Grab the markdown files and drop them into your repository. Each template is ready to use with no modifications needed, or customize them to match your team's workflow.
Tips for Getting Your Team to Actually Use Templates
Adding a template file is the easy part. Getting consistent adoption is harder. Here's what works:
Keep it short enough to not feel like homework
If your template has 30 fields, developers will delete it and write a one-liner instead. The standard template above has 6 sections, most of which take under a minute to fill in. Start minimal and add sections only when you see a recurring problem.
Use HTML comments for instructions
The <!-- instructions --> syntax renders as invisible in the PR description but shows up while editing. This gives developers guidance without cluttering the final output. If a section isn't relevant, they just delete it.
Make the checklist actionable
Every checkbox should be something the developer can verify in under 30 seconds. "Code follows best practices" is too vague. "Existing tests pass locally" is concrete and verifiable. Bad checklists get ignored. Good checklists catch bugs.
Review the descriptions during code review
If a PR has a good description, acknowledge it. If a PR has an empty description, ask for it to be filled in before reviewing the code. After a few weeks, the team builds the habit naturally.
Better PR Descriptions, Better Reports
There's a compounding benefit to well-structured PR descriptions that most teams don't think about: they make every downstream tool more effective.
When your PRs have clear descriptions with type-of-change labels, your git history becomes a structured dataset. Automated reporting tools can then generate genuinely useful summaries because they have real context to work with. Instead of a report that says "5 PRs merged," you get a report that says "3 feature PRs shipped for the checkout redesign, 1 bug fix for the notification service, and 1 infrastructure update to the CI pipeline."
If you're using a git reporting tool to keep your team updated, structured PR descriptions are the single highest-leverage improvement you can make. The template gives the AI categorized, consistent input, and the output quality goes up dramatically.
Want to see what automated reports look like when your PRs are well-structured? Check out a demo report.
Example: A Well-Written PR Using the Template
Here's what a real PR description looks like when someone fills in the standard template properly:
feat: Add rate limiting to authentication endpoints
Description
Adds Redis-based rate limiting to the /api/auth/login and /api/auth/register endpoints. Limits to 10 requests per minute per IP address. Returns 429 with Retry-After header when exceeded. This was requested after we saw brute-force attempts in the access logs last week.
Type of Change
New feature
Changes Made
Added RateLimiter middleware using Redis sliding window
Applied middleware to /api/auth/login and /api/auth/register
Added RATE_LIMIT_MAX and RATE_LIMIT_WINDOW env variables
Added rate limit headers to responses (X-RateLimit-Remaining, Retry-After)
How to Test
Start the app with Redis running locally
Send 10 POST requests to /api/auth/login
Verify the 11th request returns 429 with Retry-After header
Wait 60 seconds, verify requests work again
Checklist
☑ Code follows style guidelines
☑ Self-reviewed
☑ Added unit tests for RateLimiter
☑ Existing tests pass
☑ Updated API documentation
Compare that to "added rate limiting" as a PR description. Same change, completely different review experience.