1. Introduction
In many teams, GitHub Issues, deployments, branches, and pull requests are created in the same repository. It was a simple case.
However your setup is more advanced and very common in real companies:
Central task/ticket repo:
devops-school-com/TaskManager
Code repos:
devops-school-com/frontend-repo
devops-school-com/backend-repo
devops-school-com/mobile-repo
Your tickets are saved here:
devops-school-com/TaskManager
Code language: PHP (php)
However the actual code change may occur in another repository.
So the goal is:
TaskManager issue #560
↓
linked with branches
↓
linked with commits
↓
linked with pull requests
↓
tracked across multiple repositories
Code language: CSS (css)
GitHub supports this through publish/PR references, cover keywords, deployment message references, manual development sidebar links, and automation. GitHub automatically converts references to issues, pull requests, and commits into links in GitHub conversations and Markdown areas such as the issue body, PR body, and comments. (GitHub doc)
2.1 Problems
A Problem usually used for tasks, bugs, feature requests, or work items.
Example:
devops-school-com/TaskManager
Code language: PHP (php)
In your case, this is a central ticket.
2.2 Commit
A do is the actual code change.
Example:
git commit -m "Add login validation for devops-school-com/TaskManager#560"
Code language: JavaScript (javascript)
This message links the deployment to the main TaskManager issue.
2.3 Branches
A branch is where a developer works before creating a PR.
Example:
git checkout -b task-560-add-login-validation
Branch names do not automatically close or update issues, but good branch naming helps traceability.
2.4 Pull Requests
A Pull Request is a review and merge request for code changes.
Example of PR title:
[Task #560] Add login validation
Code language: CSS (css)
Example of a PR body:
Related to devops-school-com/TaskManager
Code language: PHP (php)
or:
Closes devops-school-com/TaskManager
Code language: PHP (php)
GitHub can link a PR to an issue manually or by using supported keywords in the PR description. When a linked PR is merged into the default branch, GitHub can automatically close the linked issue. (GitHub doc)
This is the simplest case.
Assume your problem and code are in the same repository:
Repository:
devops-school-com/backend-repo
Issue:
devops-school-com/backend-repo
PR:
devops-school-com/backend-repo
Code language: PHP (php)
3.1 Referencing Issues in Commit Messages
git commit -m "Add payment validation for #25"
Code language: JavaScript (javascript)
This creates a reference to the problem #25.
Better implementation message:
git commit -m "Add payment validation
Related to #25"
Code language: CSS (css)
3.2 Referring a Problem to the Public Relations Agency
Related to
- Added payment validation
- Updated API response
- Added validation tests
Code language: PHP (php)
This creates a clickable link from the PR to the issue.
3.3 Same-Repo Issue Automatic Closing of PR
Use one of GitHub’s closing keywords:
Closes #25
Code language: CSS (css)
or:
Fixes #25
Code language: CSS (css)
or:
Resolves #25
Code language: CSS (css)
Supported keywords include close, closes, closed, fix, fixes, fixed, resolve, resolvesAnd resolved. GitHub also supports uppercase and colon variants such as CLOSES: #10. (GitHub doc)
Example of a PR body:
Closes
- Added payment validation
- Added backend validation test cases
- Updated error message
Code language: PHP (php)
When this PR is merged into the default branch, GitHub will close the issue #25. GitHub notes that this special keyword is interpreted only when the PR targets the default branch of the repository. (GitHub doc)
Your case:
Central issue repo:
devops-school-com/TaskManager
Issue:
devops-school-com/TaskManager
Code repo:
devops-school-com/backend-repo
Code language: PHP (php)
In that case, do it No just use:
#560
Code language: CSS (css)
Because #560 in the backend-repo method:
devops-school-com/backend-repo
Code language: PHP (php)
That’s not your TaskManager problem.
You should use complete cross-repo references:
devops-school-com/TaskManager
Code language: PHP (php)
GitHub supports the use of issue references Username/Repository#number or Organization/Repository#number. (GitHub doc)
5.1 Simple Commit Reference
git commit -m "Add login validation for devops-school-com/TaskManager#560"
Code language: JavaScript (javascript)
5.2 Better Multi-Line Commit Messaging
git commit -m "Add login validation
Related to devops-school-com/TaskManager#560"
Code language: PHP (php)
5.3 Committed Features
git commit -m "Implement vehicle search filters for devops-school-com/TaskManager#560"
Code language: JavaScript (javascript)
5.4 Commit Bug Fixes
git commit -m "Fix empty response handling for devops-school-com/TaskManager#560"
Code language: JavaScript (javascript)
5.5 UI Commitment
git commit -m "Update dashboard card layout for devops-school-com/TaskManager#560"
Code language: JavaScript (javascript)
5.6 API Commitments
git commit -m "Add organization task API for devops-school-com/TaskManager#560"
Code language: JavaScript (javascript)
5.7 Commitment Test
git commit -m "Add unit tests for task filtering related to devops-school-com/TaskManager#560"
Code language: JavaScript (javascript)
5.8 Documentation Commitment
git commit -m "Update setup guide for devops-school-com/TaskManager#560"
Code language: JavaScript (javascript)
6.1 Secure Links Without Auto Close
Use this for most homework:
Related to devops-school-com/TaskManager
- Added backend validation
- Updated API response structure
- Added test coverage
- Ran unit tests
- Tested API manually
Code language: PHP (php)
This creates traceability but does not automatically close the issue.
6.2 Cross Repo Auto Close Issue
Use this only when this PR completes its task completely:
Closes devops-school-com/TaskManager
- Completed backend implementation
- Added frontend integration
- Added test coverage
- Verified locally
- Tested staging deployment
Code language: PHP (php)
For issues in different repositories, the documented GitHub syntax is:
KEYWORD OWNER/REPOSITORY
Code language: PHP (php)
Example:
Fixes octo-org/octo-repo
Code language: PHP (php)
For your case:
Fixes devops-school-com/TaskManager
Code language: PHP (php)
(GitHub doc)
This is where many teams get confused.
| Keywords | Meaning | Auto close problem? | Best use |
|---|---|---|---|
Related to devops-school-com/TaskManager#560 |
Simple link/reference | NO | Normal multi-repo work |
Refs devops-school-com/TaskManager#560 |
Simple reference | NO | Optional style |
Fixes devops-school-com/TaskManager#560 |
Final fix | Yes, after merging to the default branch | Final homework |
Closes devops-school-com/TaskManager#560 |
Final closure | Yes, after merging to the default branch | Final homework |
Resolves devops-school-com/TaskManager#560 |
Final resolution | Yes, after merging to the default branch | Final homework |
For your 4-repo setup, use Related to in most PRs. Use Closes, Fixesor Resolves only in the PR that actually solves the TaskManager problem.
Example:
frontend-repo PR: Related to devops-school-com/TaskManager
backend-repo PR: Related to devops-school-com/TaskManager
mobile-repo PR: Closes devops-school-com/TaskManager
Code language: PHP (php)
Why? Because if you use Closes in the first PR, GitHub may have closed the main TaskManager issue too early after the PR was merged.
Branch names for people and team disciplines. GitHub doesn’t automatically close an issue just because of the branch name, but a good branch name makes things easier.
Recommended format:
task-560-short-description
Example:
git checkout -b task-560-add-login-validation
git checkout -b task-560-fix-vehicle-filter
git checkout -b task-560-update-dashboard-ui
For larger teams, use the repo prefix:
git checkout -b tm-560-backend-login-validation
or:
git checkout -b taskmanager-560-api-filter-fix
Recommended PR titles:
[Task #560] Add login validation
Code language: CSS (css)
Example:
[Task #560] Add vehicle search filters
Code language: CSS (css)
[Task #560] Fix dashboard loading issue
Code language: CSS (css)
[Task #560] Add backend API for task assignment
Code language: CSS (css)
[Task #560] Update mobile task detail screen
Code language: CSS (css)
The PR title is not enough to connect GitHub. The actual link should be in the PR body:
Related to devops-school-com/TaskManager
Code language: PHP (php)
GitHub also allows manual linking.
For your case:
- Open the TaskManager issue.
- Visit:
devops-school-com/TaskManager
Code language: PHP (php)
- Find it Development section in the right sidebar.
- Click the link/add item.
- Select a code repository.
- Select PR or branch.
- Click Apply.
The GitHub docs say that from the issue sidebar, you can link a PR or branch manually, and the issue could be in a different repository than the linked PR or branch. (GitHub doc)
Important limitation: from the PR sidebar, manual linking is limited to issues in the same repository. From the issue sidebar, cross-repo linking is supported. The GitHub docs state that manual linking of PR sidebars requires the publish and PR to be in the same repository, whereas linking the publish sidebar supports different repositories. (GitHub doc)
This is your real problem.
You connect a PR/branch from:
TaskManager issue #560 → Development sidebar
Code language: CSS (css)
But you still can’t see all deployment messages in the issue timeline.
That’s normal.
The Manual Development link indicates that the work has something to do with the issue. It doesn’t automatically copy every commit message from the PR to the issue timeline. GitHub is more PR-centric than commit-centric.
Additionally, GitHub says that if the close keyword is used in a commit message, the issue can be closed when that commit is merged into the default branch, but the PR containing that commit will not be listed as a linked PR. (GitHub doc)
So, the best native GitHub flow is:
TaskManager issue
↓
Linked PR visible in Development
↓
Open PR
↓
Go to Commits tab
↓
See commit messages
If you want to do messaging directly inside TaskManager issues, you need automation.
For any TaskManager issues:
devops-school-com/TaskManager
Code language: PHP (php)
Step 1: Create a branch in the code repo
git checkout -b task-560-add-login-validation
Step 2: Add a commit with an issue reference
git commit -m "Add login validation for devops-school-com/TaskManager#560"
Code language: JavaScript (javascript)
git commit -m "Add login validation tests for devops-school-com/TaskManager#560"
Code language: JavaScript (javascript)
git commit -m "Fix validation error message for devops-school-com/TaskManager#560"
Code language: JavaScript (javascript)
Step 3: Create a PR with a proper title
[Task #560] Add login validation
Code language: CSS (css)
Step 4: Add PR content
Related to devops-school-com/TaskManager
- Added login validation
- Added validation test cases
- Updated error response
- Ran unit tests
- Tested login flow locally
This PR is part of TaskManager issue
Code language: PHP (php)
Step 5: Manually link the PR from the TaskManager issue
Visit:
TaskManager issue #560 → Development → select repo → select PR → Apply
Code language: CSS (css)
Step 6: Use closing keywords only in the final PR
Closes devops-school-com/TaskManager
Code language: PHP (php)
Assume problem:
devops-school-com/TaskManager
Code language: PHP (php)
You need changes in 3 repos:
frontend-web
backend-api
mobile-app
Back homework
Related to devops-school-com/TaskManager
- Added API endpoint
- Added request validation
- Added DB migration
Code language: PHP (php)
Front homework
Related to devops-school-com/TaskManager
- Added task form UI
- Integrated backend API
- Added error handling
Code language: PHP (php)
Mobile PR
Closes devops-school-com/TaskManager
- Added mobile task screen
- Integrated API
- Completed final user flow
Code language: PHP (php)
This gives you a clean trace without closing issues too early.
Sometimes one homework solves many problems.
Example of the same repo:
Resolves #10, resolves #11, resolves #12
Code language: CSS (css)
Cross repo example:
Resolves devops-school-com/TaskManager
Code language: PHP (php)
Mixed example:
Resolves
Code language: PHP (php)
GitHub documents that some issues must use the full syntax for each issue reference. (GitHub doc)
This is your most common case.
Use Related to anywhere:
Related to devops-school-com/TaskManager
Code language: PHP (php)
Use Closes only once, in the last PR:
Closes devops-school-com/TaskManager
Code language: PHP (php)
Recommended pattern:
| Repos | Public Relations Agency |
|---|---|
| backend-api | Related to devops-school-com/TaskManager#560 |
| frontend-web | Related to devops-school-com/TaskManager#560 |
| mobile application | Related to devops-school-com/TaskManager#560 |
| Final integration homework | Closes devops-school-com/TaskManager#560 |
16.1 Good Commitment Message
git commit -m "Add task assignment API for devops-school-com/TaskManager#560"
Code language: JavaScript (javascript)
16.2 Better Commitment Messages
git commit -m "Add task assignment API
Related to devops-school-com/TaskManager#560"
Code language: PHP (php)
16.3 Best Multi-Line Commit Messages
git commit -m "Add task assignment API
- Added task assignment endpoint
- Added request validation
- Added service layer method
- Added unit tests
Related to devops-school-com/TaskManager#560"
Code language: PHP (php)
16.4 Commit Messages for Bug Fixes
git commit -m "Fix task status filter bug
The completed task filter was not applying organization scope.
Related to devops-school-com/TaskManager#560"
Code language: PHP (php)
16.5 Commit Message for Final Fix
Use with caution:
git commit -m "Fix task assignment workflow
Closes devops-school-com/TaskManager#560"
Code language: PHP (php)
GitHub allows closing keywords in deployment messages, but a cleaner workflow is usually to include closing keywords in the PR body, as PRs are easier to review and audit. GitHub also notes that when a commit message closes an issue, the PR containing that commit will not be listed as a linked PR. (GitHub doc)
Add this file in each code repo:
.github/pull_request_template.md
Template:
## Task Link
Related to devops-school-com/TaskManager#ISSUE_ID
## What changed?
-
## Testing done
-
## Screenshots / Logs
-
## Deployment notes
-
## Final PR?
- [ ] This PR is the final PR for the task
- [ ] If final, replace `Related to` with `Closes`
Code language: HTML, XML (xml)
For your specific task:
Related to devops-school-com/TaskManager
-
-
-
-
- [ ] This PR is the final PR for TaskManager issue
Code language: PHP (php)
In the middle TaskManager repo, create:
.github/ISSUE_TEMPLATE/task.yml
Or use a simple Markdown issue template:
Describe the task.
- [ ] frontend-web
- [ ] backend-api
- [ ] mobile-app
- [ ] other
- frontend-web:
- backend-api:
- mobile-app:
- [ ]
- [ ]
- [ ]
-
Only the final PR should use:
Closes devops-school-com/TaskManager#ISSUE_ID
Code language: PHP (php)
For trouble #560the issuing body may maintain a manual list:
- backend-api: devops-school-com/backend-api
- frontend-web: devops-school-com/frontend-web
- mobile-app: devops-school-com/mobile-app
Code language: PHP (php)
This is very useful because GitHub’s native UI may not give you a perfect central commit list.
In the TaskManager#560You might see:
Development
- backend-api#45
- frontend-web#88
- mobile-app#19
Code language: CSS (css)
To see the implementation:
- Click the linked PR.
- Open Committed tab.
- Review all commit messages.
- Open Files changed for code review.
- Go back to the TaskManager issue for the final status.
This is the most natural native GitHub workflow.
GitHub does not provide a native “show all commits from a linked PR inside the main issue timeline” view.
So use GitHub Actions.
The idea:
Developer creates PR in backend-api
↓
GitHub Action extracts TaskManager issue ID from PR body
↓
Action collects PR commits
↓
Action comments on devops-school-com/TaskManager
Code language: PHP (php)
GitHub CLI supports adding comments to issues gh issue commentincluding selecting another repository with --repo OWNER/REPO. (GitHub CLI)
The GitHub REST API can also create and manage comments on issues and pull requests. (GitHub doc)
Add this workflow in each code repo:
.github/workflows/comment-taskmanager-issue.yml
name: Comment TaskManager Issue with PR Commit Summary
on:
pull_request:
types: [opened, synchronize, reopened, closed]
jobs:
comment-taskmanager:
runs-on: ubuntu-latest
steps:
- name: Extract TaskManager issue ID from PR body
id: extract
shell: bash
run: |
PR_BODY="${{ github.event.pull_request.body }}"
ISSUE_ID=$(echo "$PR_BODY" | grep -oE 'devops-school-com/TaskManager#[0-9]+' | head -1 | grep -oE '[0-9]+')
if [ -z "$ISSUE_ID" ]; then
echo "No TaskManager issue found in PR body."
echo "found=false" >> "$GITHUB_OUTPUT"
exit 0
fi
echo "found=true" >> "$GITHUB_OUTPUT"
echo "issue_id=$ISSUE_ID" >> "$GITHUB_OUTPUT"
- name: Checkout code
if: steps.extract.outputs.found == 'true'
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Build commit summary
if: steps.extract.outputs.found == 'true'
id: commits
shell: bash
run: |
PR_NUMBER="${{ github.event.pull_request.number }}"
PR_TITLE="${{ github.event.pull_request.title }}"
PR_URL="${{ github.event.pull_request.html_url }}"
REPO="${{ github.repository }}"
ISSUE_ID="${{ steps.extract.outputs.issue_id }}"
echo "## Code update from ${REPO}#${PR_NUMBER}" > comment.md
echo "" >> comment.md
echo "**PR:** ${PR_TITLE}" >> comment.md
echo "**PR URL:** ${PR_URL}" >> comment.md
echo "**Status:** ${{ github.event.action }}" >> comment.md
echo "" >> comment.md
echo "### Commits" >> comment.md
gh pr view "$PR_NUMBER" \
--repo "$REPO" \
--json commits \
--jq '.commits[] | "- `" + .oid[0:7] + "` " + .messageHeadline' >> comment.md
- name: Comment on TaskManager issue
if: steps.extract.outputs.found == 'true'
run: |
gh issue comment "${{ steps.extract.outputs.issue_id }}" \
--repo devops-school-com/TaskManager \
--body-file comment.md
env:
GH_TOKEN: ${{ secrets.TASKMANAGER_TOKEN }}
Code language: PHP (php)
Important: for cross-repo comments, use a token that has permission to write comments devops-school-com/TaskManager. GitHub recommends using the minimum permissions required for GITHUB_TOKENand when the workflow requires permissions that are not available GITHUB_TOKENYou can use a GitHub App token or a personal access token stored as a repository secret. (GitHub doc)
Create a secret in each code repo:
TASKMANAGER_TOKEN
The token must have permission to comment on issues on:
devops-school-com/TaskManager
Use these as your official rules.
Branch
task-560-short-description
Example:
task-560-add-login-validation
Commit Message
git commit -m "Add login validation for devops-school-com/TaskManager#560"
Code language: JavaScript (javascript)
PR title
[Task #560] Add login validation
Code language: CSS (css)
Public Relations Agency
Related to devops-school-com/TaskManager
-
-
Code language: PHP (php)
Final Public Relations Agency
Only when the task is completely completed:
Closes devops-school-com/TaskManager
Code language: PHP (php)
Manual Link
From the central issue:
TaskManager issue
Code language: PHP (php)
Optional Automation
Use GitHub Actions to comment on the PR implementation summary into a TaskManager issue.
| Error | Problem | Correct approach |
|---|---|---|
Use #560 in another repo |
Link to issue/PR #560 in the current repo, not TaskManager |
Use devops-school-com/TaskManager#560 |
Use Closes in every PR |
The PR that was put together first may have covered the main issue too early | Use Related to until the final PR |
| Expect a deployment message within the TaskManager issue timeline | GitHub does not display all linked PR commits directly in the main publish timeline | Go to the linked PR → Commit tab, or use GitHub Action |
| Adds the issue ID to the branch name only | Branch names alone are not enough for robust tracking | Add the issue reference in the PR body and commit |
| Linking PRs from the PR sidebar for cross-repo issues | PR sidebar manual links only work for the same repo | Use the TaskManager → Development issue sidebar |
| Using the closing keyword on non-default target branches | GitHub may ignore the closing keyword | Target the default branch for automatic closure |
| Puts the issue ID only in the PR title | Titles are useful but not enough | Include complete references in the PR body |
| Only use the commit closing keyword | The issue may be closed, but the PR may not appear as a linked PR | Prefer closing keywords in PR body |
Problem:
devops-school-com/TaskManager
Code language: PHP (php)
Code repo:
devops-school-com/backend-api
Create a branch
git checkout -b task-560-add-login-validation
Make a commitment
git add .
git commit -m "Add login validation for devops-school-com/TaskManager#560"
Code language: JavaScript (javascript)
git add .
git commit -m "Add login validation tests for devops-school-com/TaskManager#560"
Code language: JavaScript (javascript)
git add .
git commit -m "Fix validation response format for devops-school-com/TaskManager#560"
Code language: JavaScript (javascript)
Push branch
git push origin task-560-add-login-validation
Create homework
PR title:
[Task #560] Add login validation
Code language: CSS (css)
Public Relations Agency:
Related to devops-school-com/TaskManager
- Added login validation
- Added validation test cases
- Fixed response format
- Ran unit tests
- Tested login API locally
This is part of the central TaskManager issue.
Code language: PHP (php)
If this is the final PR
Change:
Related to devops-school-com/TaskManager
Code language: PHP (php)
to:
Closes devops-school-com/TaskManager
Code language: PHP (php)
Manual link
Open:
devops-school-com/TaskManager
Code language: PHP (php)
Then:
Development → Link PR/branch → select backend-api PR → Apply
View commitments
Inside the TaskManager issue, click the linked PR. Then open PR Committed tab.
For your setup, the best practical standards are:
Central issues:
devops-school-com/TaskManager
Code changes:
Other repos
Every branch:
task-ISSUE_ID-short-description
Every commit:
Message + devops-school-com/TaskManager
Every PR:
[Task
Every PR body:
Related to devops-school-com/TaskManager
Only final PR:
Closes devops-school-com/TaskManager
For visible commit summaries inside TaskManager:
Use GitHub Actions automation
Code language: PHP (php)
This gives you the cleanest traceability:
TaskManager issue
→ linked PRs
→ PR commits
→ code changes
→ final closure
Code language: PHP (php)
For your specific problem, always use:
devops-school-com/TaskManager
Code language: PHP (php)
Find a Trusted Heart Hospital
Compare heart hospitals by city and service — all in one place.
Explore the Hospital
PakarPBN
A Private Blog Network (PBN) is a collection of websites that are controlled by a single individual or organization and used primarily to build backlinks to a “money site” in order to influence its ranking in search engines such as Google. The core idea behind a PBN is based on the importance of backlinks in Google’s ranking algorithm. Since Google views backlinks as signals of authority and trust, some website owners attempt to artificially create these signals through a controlled network of sites.
In a typical PBN setup, the owner acquires expired or aged domains that already have existing authority, backlinks, and history. These domains are rebuilt with new content and hosted separately, often using different IP addresses, hosting providers, themes, and ownership details to make them appear unrelated. Within the content published on these sites, links are strategically placed that point to the main website the owner wants to rank higher. By doing this, the owner attempts to pass link equity (also known as “link juice”) from the PBN sites to the target website.
The purpose of a PBN is to give the impression that the target website is naturally earning links from multiple independent sources. If done effectively, this can temporarily improve keyword rankings, increase organic visibility, and drive more traffic from search results.