Fix 'fatal: not a git repository (or any of the parent directories): .git' Error in Git

beginner๐Ÿ“ฆ Git2026-03-18| Git 2.x on Linux, macOS, Windows (Git Bash / WSL / Terminal)

Error Message

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

The Error

You run git status or git pull and get this:

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

Git walked up your entire directory tree and found no .git folder anywhere. It has no idea what repository you mean.

Root Cause

Every Git repo keeps a hidden .git directory at its root. That folder holds all commit history, branch refs, config, and tracking data โ€” everything Git needs to function. No .git, no Git.

Six things typically cause this:

  • You're running the command outside the repo (wrong directory)
  • The project was never initialized with git init
  • The .git folder got deleted โ€” accidentally or by a cleanup script
  • You cloned into a subdirectory and are now one level above or below where .git lives
  • A Docker container or CI job doesn't have the repo mounted or cloned yet
  • You're inside a Git submodule whose link file is broken

Fix 1: Check Your Current Directory First

Nine times out of ten, the fix is this simple โ€” you're just in the wrong folder. Confirm where you are:

pwd

Then look for the .git directory:

ls -la | grep .git

Nothing? Either you're in the wrong place, or the repo was never initialized.

Navigate to your project root and try again:

cd /path/to/your/project
git status

Not sure where the repo ended up? Search for it:

# Linux/macOS
find ~ -name ".git" -type d 2>/dev/null

# Windows (PowerShell)
Get-ChildItem -Path C:\ -Filter .git -Recurse -Directory -ErrorAction SilentlyContinue

Fix 2: Initialize a New Repository

Starting fresh and the project was never a Git repo? One command fixes that:

cd /path/to/your/project
git init

Git confirms with:

Initialized empty Git repository in /path/to/your/project/.git/

Stage your files and make the first commit:

git add .
git commit -m "Initial commit"

Connecting to GitHub or GitLab? Add the remote and push:

git remote add origin https://github.com/youruser/yourrepo.git
git branch -M main
git push -u origin main

Fix 3: Re-clone the Repository

Deleted .git by accident and have no backup? Re-clone from the remote. It's the cleanest path forward.

# Save your current (uncommitted) files first
mv /path/to/project /path/to/project_backup

# Clone a fresh copy
git clone https://github.com/youruser/yourrepo.git /path/to/project

After cloning, copy any uncommitted changes back from the backup folder by hand.

Fix 4: Wrong Directory After Clone

Classic trap: you run git clone, Git creates a new folder, but you forget to cd into it before running the next command.

# You cloned here:
git clone https://github.com/youruser/myproject.git
# Git created: ./myproject/

# But you're still in the parent โ€” git status fails

# Fix: step into the folder
cd myproject
git status

Fix 5: CI/CD or Docker โ€” Missing Checkout Step

In automated pipelines this error almost always means Git commands ran before the repo was actually checked out. In GitHub Actions, the checkout action must come first:

steps:
  - name: Checkout code
    uses: actions/checkout@v4   # โ† must be first

  - name: Run git log
    run: git log --oneline -5

Docker is a different story. The .git folder is often silently excluded via .dockerignore. Check it:

# This line strips .git from your build context:
.git

# Remove it if you need git history inside the container

Mounting a volume? Make sure the host path you're mounting actually contains the .git folder โ€” not just the source files.

Fix 6: Git Worktrees or Submodules

Inside a submodule or worktree, .git is a file rather than a directory. That's intentional โ€” it points to the real git data elsewhere:

cat .git
# gitdir: ../.git/worktrees/myworktree

If that file is missing or corrupted, reinitialize from the parent repo root:

git submodule update --init --recursive

Verify the Fix

Run these three checks after any of the fixes above:

# Should show branch name and tracked files
git status

# Should list recent commits
git log --oneline -5

# Confirm .git exists and is a directory
ls -la .git

Branch info in git status? You're done.

Prevention

  • Treat .git as sacred. Never delete it manually unless you're deliberately un-tracking a project. The whole folder is your version history.
  • Back it up. Include .git in any project backup โ€” not just the source files.
  • In CI, checkout first. Every pipeline that runs Git commands needs the checkout step at the top, full stop.
  • Wrap frequent commands in a shell alias that cds to the project root first โ€” eliminates the wrong-directory mistake entirely.
  • Audit .dockerignore whenever you need Git history inside a container. It's a silent exclusion that's easy to miss.

Related Error Notes