# Repository and commits: reading a GitHub repo page

> What a repository in GitHub is, its page from top to bottom, what a single commit tells you, and commit message best practices.

- Course: [Git and GitHub for Product People](https://productovi.com/courses/git-for-product.md)
- Module: Git in plain words
- Lesson 2/15, ~29 min
- Source: https://productovi.com/courses/git-for-product/reading-a-repository-page

## What is a repository in GitHub? The page you'll open most

**Alex Tutor:** On your product team at CatChow, it all starts here: `github.com/catchow/website`. A **repository** in GitHub is one project's files with their whole history of commits, plus the team's issues, pull requests and releases around them. Its page answers most everyday questions before you click anything.

**Sofia:** It's a lot. Buttons, tabs, a list of folders, some text at the bottom…

**Alex Tutor:** Let's read it like a newspaper, top to bottom. The layout I describe is GitHub's as of 2026; buttons move around now and then, but the parts stay the same.

![A person reads a large newspaper laid out like a web page: a header strip, a row of tabs, a list of folder icons and a block at the bottom, all as grey bars.](https://productovi.com/courses/git-for-product/inline/reading-a-repository-page-illustration-2.webp)

**Alex Tutor:** At the very top: the owner and name, `catchow / website`, and a `Private` badge, so only our team can see it. On the right are three buttons: `Watch`, `Fork` and `Star`.

```text
The header of a repository page
- [Repository] catchow / website: Owner and repository name
- [Watch]: Get notifications about activity: new pull requests, issues, releases
- [Fork]: Make your own copy of the repository (you rarely need it inside your own company)
- [Star]: Bookmark the repository and show interest
```

**Sofia:** So `Watch` is the one if I want to hear about new pull requests.

**Alex Tutor:** Yes. You can even choose what to watch: everything, only releases, or only threads where you're mentioned.

> **Exercise:** You want GitHub to notify you about new pull requests and releases in `catchow/website`. Which button do you use?

## Tabs, branches and the latest commit

**Alex Tutor:** Below the header is a row of tabs. `Code` is where we are. `Issues` holds bugs and tasks, `Pull requests` holds proposed changes, `Actions` runs automatic checks and builds, `Projects` holds boards.

**Alex Tutor:** Next row: a branch selector showing `main`, with counters for branches and tags. The files below are always the files of the selected branch.

**Alex Tutor:** Then a bar with the **latest commit** on that branch: the author's avatar and name, the message, a short hash and "3 days ago". At its right edge sits a counter like `412 Commits`, which opens the full history.

**Sofia:** And below that, the folders and files.

**Alex Tutor:** Right, and each row there has two extra columns: the message of the last commit that touched that file, and how long ago it was. Under the list GitHub shows the `README`, the project's own introduction.

![A repository page reads top to bottom: header, tabs, branch selector, latest commit, file list and README, each answering its own question.](https://productovi.com/courses/git-for-product/diagrams/m1-l2-repo-page-map.png)

> **Exercise:** Put the parts of a repository page's `Code` tab in order, from top to bottom.

## Reading the file list

**Sofia:** Where would the delivery price live, then?

**Alex Tutor:** Look at the rows. `config/` says "Raise delivery price to 59 UAH · 3 weeks ago". That's the last commit that changed anything inside that folder.

**Sofia:** And `pages/` says "Add summer promo banner · 3 days ago". So the file list is also a map of what changed recently.

![A small town map where every house is a folder; a few houses have a fresh orange flag on the roof, the rest look quiet.](https://productovi.com/courses/git-for-product/inline/reading-a-repository-page-illustration-3.webp)

*The file list doubles as a map of recent changes.*

**Alex Tutor:** Exactly. It's the last change, though, not the first one: the file may be years old. To see everything that ever happened to a file, you open its history. That's next lesson.

**Alex Tutor:** Before we match the parts, one quick check on those file rows.

> **Exercise:** The `config/` row says "Raise delivery price to 59 UAH · 3 weeks ago". What does that tell you?

> **Exercise:** Match each part of the repository page with what it tells you.

## Finding a file or a sentence

**Sofia:** Clicking through folders works for `config/`. But what if I need the file with the text "Free delivery from 800 UAH" and have no idea where it lives?

**Alex Tutor:** Two tools. `Go to file` above the list, or the `t` key, finds files by name: type "delivery" and you get every file with that word in its path.

**Alex Tutor:** The search box at the very top of GitHub searches inside files. On a repository page it suggests searching just this repository, so a phrase in quotes finds the exact line of text.

**Daniel:** That's how I find copy that marketing asks me to change. Searching is faster than remembering the folder structure, even for me.

> **Exercise:** You know the exact sentence "Free delivery from 800 UAH" is on the site, but not which file holds it. What's the fastest way to find it on GitHub?

## What is a commit? Inside one commit

**Alex Tutor:** A **commit** is one saved step in the history: a set of changes with an author, a date, a message and a unique hash. Click the message in the `config/` row, and you land on the commit page for `a41c09e`.

**Alex Tutor:** At the top: the message, then the author and "committed 3 weeks ago". On the right: the parent commit and the hash. The page shows seven characters, but the full hash is 40 long; both point to the same commit.

**Alex Tutor:** Below that: "Showing 1 changed file with 1 addition and 1 deletion", and the changed line itself in red and green. That coloured part is the **diff**; we'll read diffs properly next time.

**Sofia:** And the message has a second line: "Courier rates went up on 1 June; finance asked to pass it on. (#128)"

**Alex Tutor:** That `#128` links to the pull request where the change was discussed. Commit plus PR usually tells the whole story.

> **Exercise:** Which of these can you find on a single commit's page on GitHub? Select all that apply.

## Tags: a version is a point in history

**Sofia:** The counter said the repo has tags. What are they doing here?

**Alex Tutor:** A **tag** pins a name to one commit, usually a version. When the team releases, they tag the commit that went live, say `v2.4.0`.

```text
Commit graph, oldest first: `main` with a release tag
1. commit 9d04e61 on main "Fix typo in footer"
2. commit a41c09e on main "Raise delivery price to 59 UAH"
3. commit c5d8e02 on main "Add pet passport field", tagged v2.4.0 (highlighted)
4. commit e7c3b19 on main "Add summer promo banner"
5. commit f02a6d4 on main "Update FAQ answers"
```

*Everything up to and including the tagged commit is in v2.4.0. The two commits after it are not.*

**Sofia:** So a version isn't a separate copy. It's just a bookmark on one commit, and it contains everything before it.

**Alex Tutor:** Precisely. A commit is a snapshot of the whole project at that moment, so the tagged commit carries all the earlier work with it.

**Alex Tutor:** Try it on a different graph.

> **Exercise:** Which changes are part of release `v1.8.0`?

**Alex Tutor:** One more check on tags, since people often picture them as something bigger than they are.

> **Exercise:** A tag such as `v2.4.0` is a separate copy of all the project's files, stored next to `main`.

## Commit message best practices: what makes a good one

**Sofia:** Daniel's message was really clear. Is there a rule for writing them?

**Daniel:** A few habits. First line: a short summary, about 50 characters, written as a command: "Fix", "Add", "Raise". As if finishing "If applied, this commit will…".

**Daniel:** Then, if it's not obvious, a blank line and the why: what problem it solves, who asked. The diff already shows what changed; only the message can say why.

**Daniel:** And one commit, one idea. If the message needs "and" three times, it should have been three commits.

![A neat row of small boxes, each holding one item, next to one overstuffed box spilling three unrelated things.](https://productovi.com/courses/git-for-product/inline/reading-a-repository-page-illustration-4.webp)

*One commit, one idea: easier to read, check and undo.*

**Sofia:** I've definitely seen commits just called "fix" or "changes".

**Alex Tutor:** Everyone has. They cost the next reader time, and the next reader is often you.

> **Exercise:** Which commit message will help a PM most when reading history six months from now?

## Your turn: write a commit message

**Alex Tutor:** Now you. Finance wants the free-delivery threshold raised from 800 to 1000 UAH, because average order margins shrank after the courier price increase.

**Alex Tutor:** Daniel will make the change. Write the message he should use: a summary line and one sentence on why.

**Daniel:** Keep the English summary short. The why can be as plain as you like.

**Sofia:** Challenge accepted.

> **Exercise:** Write a commit message for raising the free-delivery threshold from 800 to 1000 UAH: a summary line (in English, as teams usually do) and one sentence explaining why.

**Alex Tutor:** Next lesson: history itself. We'll read diffs line by line and use blame to find who wrote any line on the site, and why.

**Sofia:** Funny: an hour ago this page looked like a minefield. Now it reads more like a dashboard of who changed what.

- Previous lesson: [Why teams keep history: version control without fear](https://productovi.com/courses/git-for-product/why-teams-keep-history.md)
- Next lesson: [Reading history: messages, diffs and blame](https://productovi.com/courses/git-for-product/reading-history-diffs-and-blame.md)

---
Productovi Learning. Free, no sign-up needed to read.
