@@ ✦ · place keeping @@

GitHub mark file as viewed: the checkbox that keeps your place, and where it fails

Othman Shareef · October 4, 2026 · 6 min read

Buried in the corner of every file header on the Files changed tab is the most underrated control in GitHub’s review UI. The GitHub mark file as viewed checkbox does one small thing: it remembers which files you have already read. In a five-file PR that is pointless. In a fifty-file PR it is the difference between a systematic pass and rereading the same test fixture four times. This piece covers the verified behavior, the workflow that gets the most from it, and the gaps that eventually send you looking for more.

What the GitHub mark file as viewed checkbox does

The behavior, verified against GitHub’s docs on reviewing proposed changes: after you finish reviewing a file, you can mark it as viewed and the file collapses. The progress bar in the pull request header shows how many files you have viewed. And the detail that makes the feature trustworthy: “If the file changes after you view the file, it will be unmarked as viewed.” That last rule matters. A place-keeper that lied about staleness would be worse than none, because you would skip files that changed under you. GitHub chose correctness over comfort here, and it is the right call.

Why place-keeping matters in large PRs

Reviewing a large diff is fundamentally a working-memory problem: you are building a mental model faster than the file list can erode it. Every time you lose your place, you pay a re-orientation tax, scrolling to figure out what you have covered. PRs are hard to review in large part because the diff view gives you no narrative structure, and on a big change the viewed checkbox is the one piece of state that survives a coffee break. Used with discipline, it turns an amorphous wall of files into a shrinking queue, which is also the core move in our guide to reviewing large pull requests: make progress visible, or fatigue will make the decisions for you. There is a secondary benefit that goes underappreciated: the progress bar is a cheap honesty check. If you approved a forty-file PR and the bar says nine files viewed, you know exactly what kind of review that was, and so do you the next time you are tempted to repeat it.

Pair it with the file filter

Viewed state gets sharper when combined with the file filter dropdown, documented in filtering files in a pull request. You can filter the diff by file extension, by lack of an extension, by code ownership, or by dotfiles, and you can temporarily hide deleted files or files you have already viewed. The combination is the workflow: filter to one slice of the change, read it, mark as you go, hide viewed files, and watch the remaining set shrink to zero. On a mixed PR, filtering to .sql first, then source, then tests imposes at least a crude reading order on a list that is otherwise alphabetical. The file tree helps here too, with one documented quirk: it does not display if your screen is too narrow or if the PR contains only a single file, so on a laptop with a split screen you may be navigating by filter alone.

The gaps

  • No folder-level marking. Two hundred files of generated code under one directory means two hundred clicks. Filters can hide slices, but nothing marks a subtree as dealt with.
  • Resets are all or nothing per file. The auto-unmark is correct, but a rebase that touches every file wipes your progress wholesale, and nothing tells you what changed inside each unmarked file. That pain is the subject of our piece on re-reviewing with interdiffs: what you want after a push is the delta since your last read, not a fresh start.
  • No memory of conclusions. Viewed records that you looked, not what you thought. Come back Monday and the checkbox cannot tell you which files worried you.

A workflow that gets the most out of it

Within GitHub, the discipline that works: first sweep the trivial tail (lockfiles, snapshots, generated output) and mark it viewed immediately, so the progress bar reflects real work. Then filter by slice, read in dependency order as best you can, and leave unviewed anything you intend to revisit, treating the unviewed set as your literal queue. Comment as you read so conclusions live somewhere. Disclosure: the ceiling you eventually hit here, wanting reading order, grouping, and place-keeping that survives a force-push, is what we built Pyor for; it organizes the diff and scopes it per commit so your place is structural, not a row of checkboxes. But even with no new tools, viewed state used deliberately beats the default of scrolling and hoping.

A file tree where two snapshot folders have been marked viewed with one click each, their rows dimmed, and the progress counter reads 14 of 18 files viewed.A file tree where two snapshot folders have been marked viewed with one click each, their rows dimmed, and the progress counter reads 14 of 18 files viewed.
Folder-level viewed: two snapshot folders marked viewed in two clicks, and the counter moves to 14 of 18 without touching a single file.

Frequently asked questions

What happens when you mark a file as viewed on GitHub?

The file collapses in the Files changed tab, and the progress bar in the pull request header updates to show how many files you have viewed. The state is yours alone; it does not signal approval to anyone else. If the file changes after you view it, GitHub automatically unmarks it as viewed so you know to look again.

Does viewed state persist if the author pushes new commits?

Partially. Files untouched by the new commits stay marked, but any file that changed is unmarked automatically, per the GitHub docs. That reset is the honest behavior, since your earlier read no longer covers the new content, but it also means a rebase or wide-reaching push can wipe most of your progress in one stroke.

Can you mark a whole folder as viewed?

No. Viewed state is strictly per file; there is no folder-level checkbox in the Files changed tab. The closest workaround is the file filter dropdown, which can temporarily hide files you have already viewed, or filter by extension, code ownership, or dotfiles to shrink the visible set while you work through a directory.

← All posts