SharePointVault ~/gotchas/tooling ⌕ Search 404 pages, error messages, scripts…Ctrl K ★ Star
M↓ README.mdM↓ contributors-panel-stale-after-history-rewrite.md
sharepoint-vault›gotchas›tooling›contributors-panel-stale-after-history-rewrite.mdhistoryedit on GitHub
● GOTCHAtooling· 2 min read

The Contributors panel keeps a co-author you removed from history

applies to: GitHub (repository Contributors panel)reviewed: 2026-08-07#tooling#git#github

After rewriting history to drop Co-Authored-By trailers, the repository's Contributors panel can keep listing the removed person indefinitely — and the REST /contributors endpoint cannot confirm the removal for you, because it never counted co-authors in the first place.

Když přepíšeš historii, abys odstranil Co-Authored-By trailery, může postranní panel Contributors odstraněnou osobu vypisovat dál libovolně dlouho – a REST endpoint /contributors ti odstranění nepotvrdí, protože co-autory nikdy nepočítal.

Symptom

You rewrite history to remove Co-Authored-By: trailers, force-push, and verify the result:

git log origin/main --format='%B' | grep -ci 'co-authored-by'
# 0

The trailer is gone from every commit on the default branch. The Contributors panel on the repository page still shows the person, day after day, across dozens of pushes.

Worse, your verification can point the wrong way. Querying the API looks like confirmation:

curl -s .../repos/{owner}/{repo}/contributors | jq '.[].login'
# "octocat"        <- only one contributor, looks clean

…while the panel next to the README says Contributors 2.

Cause

Two separate things, and both matter.

1. The panel and the API do not count the same thing. GET /repos/{owner}/{repo}/contributors counts commit authors. The Contributors panel additionally credits co-authors from commit trailers. So before the rewrite the API never showed the co-author either — which means a "clean" API response proves nothing about whether your rewrite worked. It is not a verification, it is a different question.

2. The panel's data is cached and refreshed on its own schedule. GitHub documents that after force-pushing, rewriting history, or deleting commits, contributor displays and statistics can take about 24 hours to refresh. The API side updates promptly — its contribution count climbs with every push — while the panel does not move.

That split is the diagnostic: an API that tracks new commits alongside a panel frozen on an old figure means the data is fine and the presentation is stale.

Fix

Verify at the source, not through the API. Only the repository itself can tell you whether the trailers are gone:

git fetch origin main
git log origin/main --format='%B' | grep -ci 'co-authored-by'   # must be 0
git log origin/main --format='%an <%ae>' | sort -u              # expected authors only

Then give it the documented window. Roughly 24 hours after the force-push, with pushes happening in between.

If the panel is still wrong after that, open a support ticket — this is the documented escalation, not a workaround. Lead with the contradiction, because it is what distinguishes a caching bug from your own mistake:

After rewriting history on <date> to remove Co-Authored-By trailers, no commit on the default branch contains the trailer, and GET /repos/{owner}/{repo}/contributors returns a single contributor with an up-to-date count. The Contributors panel still lists a user who appears in no commit, more than 24 hours and many pushes later. Please trigger a recalculation.

Notes

  • Check the documented refresh window before you start waiting. Without it there is no threshold that tells you "this is now abnormal", and the wait quietly stretches to a week. Knowing the number turns waiting into a decision.
  • A force-push does not immediately destroy the old commits server-side; they stay reachable by SHA for a while. If you also prune your local backups and reflog, you lose the ability to test whether anything still references them — worth keeping until the display is confirmed clean.
  • The Insights → Contributors graph is a third surface with its own rules: it only shows the top 100 contributors, so on a busy repository an absent name there may mean something else entirely.
  • Avoiding the problem is cheaper than fixing it: if trailers are unwanted, strip them at commit time (a commit-msg hook) rather than rewriting history later.
  • The general shape — two endpoints that look interchangeable but answer different questions — also shows up in a page-size cap reported as a finding.
Was this helpful?ask or add your experience on GitHub →
Saved you an hour? A star on GitHub helps other SharePoint people find the vault.★ Star on GitHub
last reviewed: 2026-08-07last updated: 2026-09-24historyedit on GitHubview source