Tokenova Learn

Office-Ready Git · provided by Tokenova

Git error decoder

Git's messages are precise but terse. Find yours to see what it means and the safe next step.

Search this page (Ctrl+F) for a few words of the message you see.

Open the interactive version

Aborting commit due to empty commit message.

Aborting commit due to empty commit message.

What it means

The editor closed without a message, so Git cancelled the commit. Nothing was saved. It also happens every time when core.editor is plain code without --wait: VS Code opens, but Git doesn't wait for you.

How to fix it

Run git config --global --get core.editor. If it doesn't print code --wait, set it again with the quotes: git config --global core.editor "code --wait". Or commit with -m "message".

From Day 1. Open this message in the interactive decoder

fatal: could not resolve HEAD

fatal: could not resolve HEAD

What it means

git restore --staged copies from your last commit, and a brand-new repository doesn't have one yet.

How to fix it

Unstage one file with git rm --cached <file>, or everything with git reset. Both keep your files.

From Day 2. Open this message in the interactive decoder

no changes added to commit (use "git add" and/or "git commit -a")

no changes added to commit (use "git add" and/or "git commit -a")

What it means

You ran git commit, but nothing is staged. Your changes are only in the working folder.

How to fix it

Stage what you want with git add <file>, check with git status, then commit again.

From Day 2. Open this message in the interactive decoder

fatal: pathspec '.gitignore' did not match any files

fatal: pathspec '.gitignore' did not match any files

What it means

There's no file with that name in this folder. You may be in the wrong folder, or the file got another name, such as .gitignore.txt (Explorer hides the .txt).

How to fix it

Check where you are and list hidden files with Get-ChildItem -Force. Create the file with code .gitignore.

From Day 2. Open this message in the interactive decoder

fatal: ambiguous argument 'HEAD~12': unknown revision or path not in the working tree.

fatal: ambiguous argument 'HEAD~12': unknown revision or path not in the working tree.

What it means

Git can't find that commit: the history is shorter than 12 commits, or an id or name is mistyped.

How to fix it

Run git log --oneline to see which commits exist, and copy the id from there.

From Day 3. Open this message in the interactive decoder

fatal: bad revision 'apply_tax/,+3'

fatal: bad revision 'apply_tax/,+3'

What it means

A git blame -L pattern with a space in it wasn't quoted, so the shell split it in two and Git read the second half as a commit name.

How to fix it

Put the whole pattern in single quotes: git blame -L '/def apply_tax/,+3' transform.py.

From Day 3. Open this message in the interactive decoder

fatal: your current branch 'main' does not have any commits yet

fatal: your current branch 'main' does not have any commits yet

What it means

You ran git log in a repository with no commits, so there's no history to show.

How to fix it

Make your first commit (git add, then git commit), then run git log again.

From Day 3. Open this message in the interactive decoder

error: Your local changes to the following files would be overwritten by checkout:

error: Your local changes to the following files would be overwritten by checkout:

What it means

You have uncommitted edits to a file that is different on the branch you want. Switching would overwrite them, so Git refused and changed nothing.

How to fix it

Stash them (git stash push -m "wip"), switch, and later git stash pop on the original branch. Or commit them first.

From Day 4, Bonus B2. Open this message in the interactive decoder

error: The following untracked working tree files would be overwritten by checkout:

error: The following untracked working tree files would be overwritten by checkout:

What it means

A new file in your folder has the same name as a file on the other branch.

How to fix it

Move or rename your file, or stash it with git stash push -u, then switch.

From Day 4. Open this message in the interactive decoder

fatal: a branch is expected, got commit '24ae097'

fatal: a branch is expected, got commit '24ae097'

What it means

git switch only switches to branches, and you gave it a commit id.

How to fix it

To look at that commit, use git switch --detach 24ae097. To start work there, git switch -c <new-branch> 24ae097.

From Day 4. Open this message in the interactive decoder

Warning: you are leaving 1 commit behind, not connected to any of your branches:

Warning: you are leaving 1 commit behind, not connected to any of your branches:

What it means

You made a commit in detached HEAD and switched away without putting a branch on it.

How to fix it

Right away, run the command Git suggests with a real name: git branch rescue/my-work 3884bef. If the id has scrolled away, git reflog shows it.

From Day 4. Open this message in the interactive decoder

error: Cannot delete branch 'fix/report-header' checked out at

error: Cannot delete branch 'fix/report-header' checked out at

What it means

You tried to delete the branch you're on.

How to fix it

Switch to another branch first (git switch main), then delete.

From Day 4. Open this message in the interactive decoder

No stash entries found.

No stash entries found.

What it means

The stash shelf is empty, so there's nothing to pop.

How to fix it

Check git stash list. If you stashed on a machine or clone other than this one, the stash isn't here: stashes are never pushed.

From Day 4. Open this message in the interactive decoder

CONFLICT (content): Merge conflict in transform.py

CONFLICT (content): Merge conflict in transform.py

What it means

Both branches changed the same lines of this file. The merge is paused, not broken.

How to fix it

Edit the file to the right final version and delete the markers. Then git add transform.py and git commit --no-edit. Or cancel with git merge --abort.

From Day 5. Open this message in the interactive decoder

Automatic merge failed; fix conflicts and then commit the result.

Automatic merge failed; fix conflicts and then commit the result.

What it means

At least one file has a conflict that needs you.

How to fix it

Run git status to see which files. Resolve and git add each one, then git commit.

From Day 5. Open this message in the interactive decoder

fatal: Not possible to fast-forward, aborting.

fatal: Not possible to fast-forward, aborting.

What it means

You asked for a fast-forward only (--ff-only, or the pull.ff=only setting), but both branches have new commits.

How to fix it

Merge without --ff-only to create a merge commit, or rebase first (Day 10). When it's a fork's main that has moved away from upstream, don't merge: save your commits on a branch (git branch my-work), then git reset --hard upstream/main (see Bonus 3).

From Day 5, Bonus B3. Open this message in the interactive decoder

error: The branch 'feature/x' is not fully merged.

error: The branch 'feature/x' is not fully merged.

What it means

The branch has commits that aren't in your current branch. Deleting the label would make them hard to find.

How to fix it

Merge it first. If you really want to throw that work away, use git branch -D feature/x.

From Day 5. Open this message in the interactive decoder

fatal: You have not concluded your merge (MERGE_HEAD exists).

fatal: You have not concluded your merge (MERGE_HEAD exists).

What it means

A merge is still in progress, and you tried to start another one.

How to fix it

Finish it (git add the fixed files, then git commit) or cancel it with git merge --abort.

From Day 5. Open this message in the interactive decoder

error: Merging is not possible because you have unmerged files.

error: Merging is not possible because you have unmerged files.

What it means

There are unresolved conflicts from a merge (or pull) that's still in progress.

How to fix it

Resolve and git add each conflicted file, then git commit. Or cancel with git merge --abort.

From Day 5. Open this message in the interactive decoder

fatal: cannot switch branch while merging

fatal: cannot switch branch while merging

What it means

You tried to switch branches in the middle of a merge.

How to fix it

Finish the merge (git add + git commit) or cancel it (git merge --abort), then switch.

From Day 5. Open this message in the interactive decoder

! [rejected] main -> main (fetch first)

 ! [rejected]        main -> main (fetch first)

What it means

GitHub has commits you've never downloaded (usually a teammate's push). Your push would erase them, so GitHub refused.

How to fix it

git pull (or git pull --rebase), then git push. Never --force.

From Day 6. Open this message in the interactive decoder

! [rejected] main -> main (non-fast-forward)

 ! [rejected]        main -> main (non-fast-forward)

What it means

Same situation, but you already fetched the teammate's commits: your branch and GitHub's have diverged.

How to fix it

git pull or git pull --rebase, then git push.

From Day 6. Open this message in the interactive decoder

fatal: The current branch feature/7-supplier-filter has no upstream branch.

fatal: The current branch feature/7-supplier-filter has no upstream branch.

What it means

This branch exists only on your laptop, and isn't linked to a GitHub branch yet.

How to fix it

git push -u origin feature/7-supplier-filter once. After that, plain git push works.

From Day 6. Open this message in the interactive decoder

There is no tracking information for the current branch.

There is no tracking information for the current branch.

What it means

git pull doesn't know which GitHub branch to pull from, because this branch has no upstream.

How to fix it

Publish it with git push -u origin <branch>, or pull a named branch: git pull origin main.

From Day 6. Open this message in the interactive decoder

fatal: Need to specify how to reconcile divergent branches.

fatal: Need to specify how to reconcile divergent branches.

What it means

Both sides have new commits and this Git has no pull.rebase setting, so it won't guess between merge and rebase.

How to fix it

Choose for this pull: git pull --no-rebase (merge) or git pull --rebase. The pull.rebase setting (Day 10) sets a default; you set yours on Day 1.

From Day 6. Open this message in the interactive decoder

fatal: refusing to merge unrelated histories

fatal: refusing to merge unrelated histories

What it means

The two branches have no commit in common. Typically GitHub made its own first commit (a README) and your laptop has another.

How to fix it

For a brand-new GitHub repo, delete it and create it again empty. Or join them once: git pull --no-rebase --allow-unrelated-histories origin main, then git push -u origin main.

From Day 7. Open this message in the interactive decoder

error: remote origin already exists.

error: remote origin already exists.

What it means

This repo already has a remote called origin, perhaps from an earlier try.

How to fix it

Check it with git remote -v. To point it somewhere else: git remote set-url origin <new URL>.

From Day 7. Open this message in the interactive decoder

warning: adding embedded git repository: playground/02-first-repo/invoice-pipeline

warning: adding embedded git repository: playground/02-first-repo/invoice-pipeline

What it means

git add found another repository inside this one. Only a pointer gets added, which nobody can clone.

How to fix it

Take it out again with git rm -r -f --cached playground (it only unstages; the folder stays on disk), make sure .gitignore contains playground/, then commit.

From Day 7. Open this message in the interactive decoder

error: The branch 'docs/contributing-tips' is not fully merged.

error: The branch 'docs/contributing-tips' is not fully merged.

What it means

The branch's own commits aren't in the branch you're on. Right after a Squash and merge, a Rebase and merge or a cherry-pick this is expected: main only has copies of them.

How to fix it

Check the work is safe: the PR shows Merged and you ran git pull on main, or a tag such as v1.2.1 points at the commit. Then git branch -D docs/contributing-tips.

From Day 8, Day 14. Open this message in the interactive decoder

Your configuration specifies to merge with the ref 'refs/heads/docs/contributing-tips' from the remote, but no such ref was fetched.

Your configuration specifies to merge with the ref 'refs/heads/docs/contributing-tips'
from the remote, but no such ref was fetched.

What it means

You ran git pull on a branch that no longer exists on GitHub, usually because its PR was merged and the branch deleted.

How to fix it

git switch main, git pull --prune, then delete the old branch with git branch -D docs/contributing-tips.

From Day 8. Open this message in the interactive decoder

Your branch is based on 'origin/docs/contributing-tips', but the upstream is gone.

Your branch is based on 'origin/docs/contributing-tips', but the upstream is gone.

What it means

git status on a branch whose GitHub copy was deleted and pruned. Normal after a merged PR.

How to fix it

Switch to main and pull. If the PR is merged, delete the branch with git branch -D.

From Day 8. Open this message in the interactive decoder

AssertionError: -50.0 != 0

AssertionError: -50.0 != 0

What it means

A test expected 0 but the code returned -50.0. Read the lines above it: they name the test and the line that checks.

How to fix it

Reproduce with python -m unittest, fix the code (not the test), commit and push. The check runs again.

From Day 9. Open this message in the interactive decoder

! [rejected] fix/discount-cap -> fix/discount-cap (fetch first)

 ! [rejected]        fix/discount-cap -> fix/discount-cap (fetch first)

What it means

GitHub's copy of your PR branch has a commit you don't have, often a Commit suggestion from the review.

How to fix it

git pull, then git push. Never force-push it away.

From Day 9. Open this message in the interactive decoder

! [rejected] feature/export-csv -> feature/export-csv (stale info)

 ! [rejected]        feature/export-csv -> feature/export-csv (stale info)

What it means

--force-with-lease refused: someone pushed to that branch after your last fetch. Nothing was overwritten.

How to fix it

git fetch, then look with git log --format="%h %an %s" HEAD..origin/feature/export-csv. Bring the new commit in (git cherry-pick <id>), then git push --force-with-lease again.

From Day 10. Open this message in the interactive decoder

! [rejected] feature/export-csv -> feature/export-csv (remote ref updated since checkout)

 ! [rejected]        feature/export-csv -> feature/export-csv (remote ref updated since checkout)

What it means

--force-if-includes refused: a fetch brought in a commit that isn't part of your branch yet, so forcing would erase it.

How to fix it

Look at the new commit with git log HEAD..origin/feature/export-csv and bring it into your branch (git cherry-pick <id>). Then push with git push --force-with-lease alone: --force-if-includes doesn't count a cherry-picked copy and would refuse again.

From Day 10. Open this message in the interactive decoder

error: could not apply 1e4386a... Document the CSV export

error: could not apply 1e4386a... Document the CSV export

What it means

A rebase (or a cherry-pick) stopped because replaying this commit caused a conflict. The hint lines under it say which one.

How to fix it

Fix the conflicted files (git status lists them), git add them, run the tests, then git rebase --continue (or git cherry-pick --continue). To go back instead: git rebase --abort.

From Day 10, Day 14, Bonus B1. Open this message in the interactive decoder

error: cannot rebase: You have unstaged changes.

error: cannot rebase: You have unstaged changes.

What it means

A rebase needs a clean working folder, and you have uncommitted edits.

How to fix it

Commit them, or shelve them with git stash, rebase, then git stash pop.

From Day 10. Open this message in the interactive decoder

You must edit all merge conflicts and then mark them as resolved using git add

You must edit all merge conflicts and then
mark them as resolved using git add

What it means

You ran git rebase --continue, but a file is still conflicted (or not staged).

How to fix it

Finish the file, delete the markers, git add it, then git rebase --continue again.

From Day 10. Open this message in the interactive decoder

fatal: It seems that there is already a rebase-merge directory, and

fatal: It seems that there is already a rebase-merge directory, and

What it means

A rebase is already in progress, and you tried to start another one.

How to fix it

git status shows it. Finish it with git rebase --continue, or cancel it with git rebase --abort.

From Day 10. Open this message in the interactive decoder

fatal: cannot switch branch while rebasing

fatal: cannot switch branch while rebasing

What it means

You tried to switch branches in the middle of a rebase.

How to fix it

Finish the rebase (git rebase --continue) or cancel it (git rebase --abort), then switch.

From Day 10. Open this message in the interactive decoder

fatal: No rebase in progress?

fatal: No rebase in progress?

What it means

You ran git rebase --continue, --skip or --abort, but no rebase is running. Usually the rebase already finished.

How to fix it

Nothing to fix. git status and git log --oneline show where you are.

From Day 10. Open this message in the interactive decoder

error: commit a7ecd9b742b210bb546e3d595f6b0db8e1124860 is a merge but no -m option was given.

error: commit a7ecd9b742b210bb546e3d595f6b0db8e1124860 is a merge but no -m option was given.

What it means

You asked to revert a merge commit. It has two parents, and Git needs to know which side to keep.

How to fix it

Use git revert -m 1 <id> to keep the branch you merged into (usually main) and undo what the merge brought in.

From Day 11. Open this message in the interactive decoder

fatal: clean.requireForce defaults to true and neither -i, -n, nor -f given; refusing to clean

fatal: clean.requireForce defaults to true and neither -i, -n, nor -f given; refusing to clean

What it means

git clean deletes files for good, so Git refuses to run it without an explicit flag.

How to fix it

Preview with git clean -nd, then delete with git clean -fd.

From Day 11. Open this message in the interactive decoder

error: could not revert 7dab47a... Change tax rate to 0.8

error: could not revert 7dab47a... Change tax rate to 0.8

What it means

A later commit changed the same lines, so Git can't work out the undo on its own. The revert is paused, not broken.

How to fix it

Fix the conflicted file (git status lists it), git add it, then git revert --continue and close the message tab. Or cancel with git revert --abort.

From Day 11. Open this message in the interactive decoder

The following paths are ignored by one of your .gitignore files:

The following paths are ignored by one of your .gitignore files:

What it means

You asked Git to add a file that a .gitignore rule excludes. Git lists the paths on the next lines and suggests -f.

How to fix it

Usually nothing: the rule is doing its job. If the file really belongs in Git, fix the rule (git check-ignore -v <path> shows which one) or use git add -f <path>.

From Day 12. Open this message in the interactive decoder

! [remote rejected] main -> main (pre-receive hook declined)

 ! [remote rejected] main -> main (pre-receive hook declined)

What it means

A check on the server refused your whole push. The remote: lines just above say why: for example GH001 (a file is too big) or GH006 (a protected branch).

How to fix it

Read the remote: error: lines and fix that cause. For GH001, take the file out of the commits you haven't pushed yet, ignore it, and push again.

From Day 12. Open this message in the interactive decoder

fatal: pathspec '.env' did not match any files

fatal: pathspec '.env' did not match any files

What it means

git rm --cached .env found nothing to untrack: Git isn't tracking .env (or the name or folder is wrong).

How to fix it

Check with git ls-files .env. If it prints nothing, the file isn't tracked, and a .gitignore rule is all you need.

From Day 12. Open this message in the interactive decoder

fatal: a branch is expected, got tag 'v1.0.0'

fatal: a branch is expected, got tag 'v1.0.0'

What it means

git switch only switches to branches, and v1.0.0 is a tag.

How to fix it

To work from the tag, create a branch there: git switch -c hotfix/1.0.1 v1.0.0. To only look around, git switch --detach v1.0.0.

From Day 13. Open this message in the interactive decoder

fatal: tag 'v1.0.0' already exists

fatal: tag 'v1.0.0' already exists

What it means

A tag with that name is already in your repository. Tags don't move.

How to fix it

Pick the next version number. Only if you haven't pushed it yet: git tag -d v1.0.0 and create it again.

From Day 13. Open this message in the interactive decoder

! [rejected] v1.0.1 -> v1.0.1 (already exists)

 ! [rejected]        v1.0.1 -> v1.0.1 (already exists)

What it means

GitHub already has a tag called v1.0.1 that points somewhere else. Git's hint adds Updates were rejected because the tag already exists in the remote.

How to fix it

Don't force it: people may use the published tag. git ls-remote --tags origin lists the tags GitHub has. Delete your own copy with git tag -d v1.0.1, and release your change as the next version.

From Day 13. Open this message in the interactive decoder

hint: Updates were rejected because the tip of your current branch is behind

hint: Updates were rejected because the tip of your current branch is behind

What it means

Your branch doesn't contain the newest commits of its copy on GitHub. Right after you rewrote your own pushed branch (rebase or amend), those are simply your old commits.

How to fix it

If you just rewrote a branch that is yours alone: git push --force-with-lease, and don't git pull, which brings the old commits back in. If you rewrote nothing, a teammate pushed first: git pull --rebase, then push.

From Day 14, Bonus B1. Open this message in the interactive decoder

You need to start by "git bisect start"

You need to start by "git bisect start"

What it means

You typed git bisect good or git bisect bad without an active bisect session.

How to fix it

Run git bisect start first (in a terminal Git may offer to do it for you), then mark the bad and good commits.

From Bonus B2. Open this message in the interactive decoder

fatal: 'hotfix/1.2.1' is already checked out at 'C:/work/hotfix-1.2.1'

fatal: 'hotfix/1.2.1' is already checked out at 'C:/work/hotfix-1.2.1'

What it means

That branch is checked out in another worktree. A branch can be open in only one folder at a time.

How to fix it

Work in that folder, or remove the worktree first: git worktree remove ../hotfix-1.2.1.

From Bonus B4. Open this message in the interactive decoder

fatal: '../hotfix-1.2.1' contains modified or untracked files, use --force to delete it

fatal: '../hotfix-1.2.1' contains modified or untracked files, use --force to delete it

What it means

The worktree folder still has changes that aren't committed.

How to fix it

Commit (or stash) them in that folder first. Use --force only if you really want to throw them away.

From Bonus B4. Open this message in the interactive decoder

fatal: Not a valid object name 1234567

fatal: Not a valid object name 1234567

What it means

No object in this repository has an id starting with those characters (often a typo, or an id from another repository).

How to fix it

Copy the id again from git log --oneline or git cat-file -p output.

From Bonus B6. Open this message in the interactive decoder

fatal: not a git repository (or any of the parent directories): .git

fatal: not a git repository (or any of the parent directories): .git

What it means

Your terminal isn't inside a Git repository folder.

How to fix it

cd into the repository folder (for example cd C:\work\invoice-pipeline), or create one with git init or git clone.

From the reference. Open this message in the interactive decoder

warning: in the working copy of 'transform.py', LF will be replaced by CRLF the next time Git touches it

warning: in the working copy of 'transform.py', LF will be replaced by CRLF the next time Git touches it

What it means

Windows line-ending conversion is on (core.autocrlf=true). Git is telling you it will store the file with Linux-style line endings and give you Windows ones.

How to fix it

Nothing to do: it's harmless. A .gitattributes file with * text=auto makes this consistent for the whole team.

From the reference. Open this message in the interactive decoder

hint: Waiting for your editor to close the file...

hint: Waiting for your editor to close the file...

What it means

Git opened your editor (VS Code) for a commit or merge message and is waiting for you.

How to fix it

Write or accept the message, save, then close that tab. Git continues as soon as the tab closes.

From the reference. Open this message in the interactive decoder

error: unknown switch `e'

error: unknown switch `e'

What it means

In PowerShell, stash@{0} or HEAD@{1} without quotes gets mangled: PowerShell treats {0} as a script block.

How to fix it

Put the reference in single quotes: git stash pop 'stash@{0}', git reset --hard 'HEAD@{1}'.

From the reference. Open this message in the interactive decoder

ScriptBlock should only be specified as a value of the Command parameter.

ScriptBlock should only be specified as a value of the Command parameter.

What it means

Same PowerShell problem: an unquoted {…} in HEAD@{1} or stash@{0} was read as PowerShell code. PowerShell prints this one itself when the command also has a -c option, as in git switch -c rescue/my-work HEAD@{1}. Git never ran.

How to fix it

Quote it: 'HEAD@{1}', 'stash@{0}'.

From the reference. Open this message in the interactive decoder

fatal: ambiguous argument 'HEAD@': unknown revision or path not in the working tree.

fatal: ambiguous argument 'HEAD@': unknown revision or path not in the working tree.

What it means

The same PowerShell problem again, with git show, git log or git diff: the unquoted {1} of HEAD@{1} was read as PowerShell code, so Git only received HEAD@.

How to fix it

Quote it: git show 'HEAD@{1}'.

From the reference. Open this message in the interactive decoder

nothing added to commit but untracked files present (use "git add" to track)

nothing added to commit but untracked files present (use "git add" to track)

What it means

You created files but haven't staged them, so there's nothing to commit.

How to fix it

git status, then git add <file> (or add them to .gitignore if they shouldn't be in Git), then commit.

From the reference. Open this message in the interactive decoder

nothing to commit, working tree clean

nothing to commit, working tree clean

What it means

Everything is already committed. Not an error.

How to fix it

Nothing to do. If you expected changes, check that you saved the file, and that you're in the right folder and on the right branch.

From the reference. Open this message in the interactive decoder

fatal: a branch named 'feature/x' already exists

fatal: a branch named 'feature/x' already exists

What it means

You tried to create a branch whose name is taken.

How to fix it

Switch to it with git switch feature/x, or choose a different name.

From the reference. Open this message in the interactive decoder

error: pathspec 'feature/x' did not match any file(s) known to git

error: pathspec 'feature/x' did not match any file(s) known to git

What it means

git checkout couldn't find a branch (or a file) with that name. Often the branch is on GitHub but you haven't fetched it yet.

How to fix it

git fetch, then git switch feature/x. Check the spelling with git branch -a.

From the reference. Open this message in the interactive decoder

fatal: invalid reference: feature/x

fatal: invalid reference: feature/x

What it means

git switch couldn't find a branch with that name, locally or among the remote branches you've fetched.

How to fix it

git fetch, then try again. Or create it: git switch -c feature/x.

From the reference. Open this message in the interactive decoder

error: src refspec main does not match any

error: src refspec main does not match any

What it means

You tried to push a branch that doesn't exist locally. Usually: no commits yet, or the branch is called something else (like master).

How to fix it

Make your first commit, and check the branch name with git branch. Rename it if needed: git branch -M main.

From the reference. Open this message in the interactive decoder

fatal: 'origin' does not appear to be a git repository

fatal: 'origin' does not appear to be a git repository

What it means

There's no remote called origin (or the URL is wrong).

How to fix it

git remote -v shows what's configured. Add it with git remote add origin https://github.com/you/repo.git.

From the reference. Open this message in the interactive decoder

Permission denied (publickey).

Permission denied (publickey).

What it means

GitHub didn't accept your SSH key: it isn't added to your account, or the wrong key is being used.

How to fix it

ssh -T git@github.com to test. Add your public key (~/.ssh/id_ed25519.pub) in GitHub settings under SSH keys. Or use the HTTPS URL and sign in through the browser.

From the reference. Open this message in the interactive decoder

fatal: Authentication failed for 'https://github.com/acme/invoice-pipeline.git/'

fatal: Authentication failed for 'https://github.com/acme/invoice-pipeline.git/'

What it means

GitHub rejected the credentials. Account passwords don't work for Git any more.

How to fix it

Let Git Credential Manager sign you in through the browser. If an old saved credential is stuck, remove the git:https://github.com entry in Windows Credential Manager and try again.

From the reference. Open this message in the interactive decoder

remote: Permission to acme/invoice-pipeline.git denied to your-username.

remote: Permission to acme/invoice-pipeline.git denied to your-username.

What it means

You're signed in, but that account has no write access to the repo (or needs SSO authorisation for the company).

How to fix it

Ask for access, check you're using the right GitHub account, or authorise your token/key for the organization's SSO.

From the reference. Open this message in the interactive decoder

SSL certificate problem: unable to get local issuer certificate

SSL certificate problem: unable to get local issuer certificate

What it means

Common on company networks that inspect encrypted traffic. Git doesn't trust the company's certificate.

How to fix it

Tell Git to use the Windows certificate store: git config --global http.sslBackend schannel.

From the reference. Open this message in the interactive decoder

fatal: detected dubious ownership in repository at 'C:/work/invoice-pipeline'

fatal: detected dubious ownership in repository at 'C:/work/invoice-pipeline'

What it means

The folder belongs to a different Windows user (common with shared drives or copied folders). Git refuses to use it, for safety.

How to fix it

Only if you trust the folder: git config --global --add safe.directory C:/work/invoice-pipeline.

From the reference. Open this message in the interactive decoder

error: cannot pull with rebase: You have unstaged changes.

error: cannot pull with rebase: You have unstaged changes.

What it means

A pull that rebases needs a working folder without uncommitted changes. That's git pull --rebase, and also plain git pull once pull.rebase is true (a course setting from Day 1).

How to fix it

Commit or stash first (git stash, git pull --rebase, git stash pop), or use git pull --rebase --autostash.

From the reference. Open this message in the interactive decoder

remote: error: GH006: Protected branch update failed for refs/heads/main.

remote: error: GH006: Protected branch update failed for refs/heads/main.

What it means

The branch is protected: changes must arrive through a pull request (and maybe pass checks and reviews).

How to fix it

Push your work to a new branch and open a pull request. See Rescue › My push was rejected.

From the reference. Open this message in the interactive decoder

remote: error: GH013: Repository rule violations found for refs/heads/main.

remote: error: GH013: Repository rule violations found for refs/heads/main.

What it means

A repository ruleset (GitHub's newer form of branch protection) blocked the push.

How to fix it

Read the lines under it: they name the rule. Usually: open a pull request instead of pushing to main.

From the reference. Open this message in the interactive decoder

remote: error: GH001: Large files detected. You may want to try Git Large File Storage - https://git-lfs.github.com.

remote: error: GH001: Large files detected. You may want to try Git Large File Storage - https://git-lfs.github.com.

What it means

A file in your push is larger than GitHub's 100 MB limit.

How to fix it

Remove the file from the commits you're pushing, add it to .gitignore, and push again. See Rescue › My push was rejected › A file is too big for GitHub.

From the reference. Open this message in the interactive decoder