Overview
This error means Git cannot find or use a remote named "origin". Common causes:
- No remote configured
- Remote exists under a different name
- The remote URL is wrong (typo, missing .git suffix, wrong protocol)
- You are in the wrong directory (not the repo)
- Remote repo was deleted/moved or your access changed
This guide shows quick fixes, deeper diagnosis, and CI/CD-safe steps.
Quickstart (most cases)
- Check remotes:
git remote -v - If empty, add the remote:
git remote add origin https://github.com/OWNER/REPO.git - If present but wrong, fix the URL:
git remote set-url origin [email protected]:OWNER/REPO.git - Push and set upstream:
git branch -M main git push -u origin main
Minimal working example
Create a new repo, add a remote, and push:
mkdir demo && cd demo
git init
printf "# Demo\n" > README.md
git add README.md
git commit -m "init"
# Add the remote (pick SSH or HTTPS)
# HTTPS:
# git remote add origin https://github.com/OWNER/demo.git
# SSH:
# git remote add origin [email protected]:OWNER/demo.git
git branch -M main
git push -u origin main
If this succeeds, your remote "origin" is correctly configured.
Diagnose and fix step-by-step
Ensure you are in a Git repo:
git rev-parse --is-inside-work-treeIf this prints "true", proceed. Otherwise, cd into the correct project directory or run
git initfirst.List remotes:
git remote -v- No output: Add a remote:
git remote add origin <URL> - Different name (e.g., "upstream"): Rename or add a second remote:
git remote rename upstream origin # or git remote add origin <URL>
- No output: Add a remote:
Validate the URL format:
- HTTPS:
https://host/owner/repo.git(".git" optional for many hosts) - SSH:
git@host:owner/repo.gitFix typos and protocols:
git remote set-url origin https://gitlab.com/owner/repo.git # or git remote set-url origin [email protected]:owner/repo.git- HTTPS:
Check access and reachability:
- SSH:
ssh -T [email protected] # or your host - HTTPS: ensure credentials are available (credential helper, token, or CI secret).
- SSH:
Verify repo exists and you have permission:
- If the remote repo was renamed or deleted, update the URL to the new location or recreate/access it.
Try a fresh fetch to confirm:
git fetch origin --pruneIf it succeeds, pushing should work:
git push -u origin HEADInspect .git/config if issues persist:
sed -n '1,120p' .git/configYou should see something like:
[remote "origin"] url = [email protected]:owner/repo.git fetch = +refs/heads/*:refs/remotes/origin/*If "origin" is missing or malformed, re-add it:
git remote remove origin 2>/dev/null || true git remote add origin <URL>
Common scenarios and commands
- Remote missing:
git remote add origin <URL> - Remote named differently:
git remote rename <old> origin - Wrong URL:
git remote set-url origin <URL> - Wrong directory:
cd /path/to/repo - New branch without upstream:
git push -u origin <branch> - Remote deleted/moved: point to the new path with
set-url
CI/CD notes (DevOps)
- Non-interactive auth:
- HTTPS with token (avoid printing secrets):
git config --global credential.helper store # Or use environment-injected credentials via CI secret variables git remote set-url origin https://oauth2:${GIT_TOKEN}@example.com/owner/repo.git - SSH:
- Add deploy key and known_hosts, then use
git@host:owner/repo.git.
- Add deploy key and known_hosts, then use
- HTTPS with token (avoid printing secrets):
- Ensure the job runs inside a Git checkout. Many CI systems provide a detached worktree; confirm with
git rev-parse. - If the checkout removed remotes (some sparse/partial clones), re-add
originbefore pushing:git remote add origin ${REMOTE_URL} - Set upstream explicitly in pipelines to avoid branch detection issues:
git push -u origin HEAD:${CI_COMMIT_REF_NAME}
Pitfalls
- Mixing SSH and HTTPS accidentally (credential mismatch). Keep one scheme.
- Using a personal token in plain logs. Mask secrets and use credential helpers.
- Misspelling the remote name (e.g., "orign"). Use
git remote -vto confirm. - Pushing to a URL that points to a fork or mirror unintentionally. Double-check
git remote -v. - Missing
.gitdirectory due to copying files without VCS metadata. Re-clone orgit initand reconnect.
Performance notes
- Large repos: fetch only what you need:
git fetch origin --depth=1 --no-tags - Regularly prune and GC to keep operations fast:
git remote prune origin git gc --aggressive --prune=now - Cache clones in CI with artifacts or use
git clone --referenceto speed builds.
FAQ
What is "origin"? The default remote name created by
git clone. It’s just a label; you can rename it.How do I rename a remote to "origin"?
git remote rename <old> originHow do I remove and recreate the remote?
git remote remove origin git remote add origin <URL>Do I need the .git suffix? Many hosts accept both, but including
.gitavoids ambiguity.How do I set the upstream for an existing branch?
git branch --set-upstream-to=origin/<branch> # or during push git push -u origin <branch>
By verifying the remote name, correcting the URL, and ensuring credentials and network access, you can resolve the error and push successfully in local and CI environments.