14 May 2026
How to Connect GitHub Issues, Commits, Branches, and Pull Requests — The Same Repo and Cross-Repo Workflow

How to Connect GitHub Issues, Commits, Branches, and Pull Requests — The Same Repo and Cross-Repo Workflow

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 #560linked with brancheslinked with commitslinked with pull requeststracked 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:

  1. Open the TaskManager issue.
  2. Visit:
devops-school-com/TaskManager
Code language: PHP (php)
  1. Find it Development section in the right sidebar.
  2. Click the link/add item.
  3. Select a code repository.
  4. Select PR or branch.
  5. 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 #560Development 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 #560Developmentselect reposelect PRApply
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:

  1. Click the linked PR.
  2. Open Committed tab.
  3. Review all commit messages.
  4. Open Files changed for code review.
  5. 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.

Jasa Backlink

Download Anime Batch