# How to Ignore node_modules in a Git Repository

> Stop Git from tracking Node.js dependencies. Add node_modules to your gitignore file and keep your repository clean and efficient.

- Repository: [GitHub/gitignore](https://github.com/github/gitignore)
- Tags: how-to-guide
- Published: 2026-02-24

---

**Add `node_modules/` to your `.gitignore` file to prevent Git from tracking Node.js dependencies.**

To ignore node_modules in a Git repository effectively, leverage the official templates maintained by GitHub. The github/gitignore repository provides a battle-tested **Node.gitignore** file that includes the standard `node_modules/` exclusion pattern, ensuring your dependency directories stay out of version control while keeping your repository lean and clone operations fast.

## Why You Should Ignore node_modules in Git

The `node_modules` directory contains thousands of files downloaded by npm, yarn, or pnpm that can be regenerated from your [`package.json`](https://github.com/github/gitignore/blob/main/package.json) and lock files. Tracking these in Git bloats your repository size, slows down clones and pulls, and creates unnecessary noise in diffs and merge conflicts. According to the github/gitignore source code, this directory is safe to exclude because dependency managers can reconstruct it entirely from your manifest files.

## The Official Node.gitignore Template

The github/gitignore repository maintains the definitive template for Node.js projects. In `Node.gitignore` at line 40, you will find the exact exclusion rule used industry-wide:

```text
node_modules/

```

This pattern appears within the **Dependency directories** section of the template, alongside related entries like `jspm_packages/` and `web_modules/`. The repository also documents this in the main [`README.md`](https://github.com/github/gitignore/blob/main/README.md), which links to official Git documentation explaining how ignore patterns work.

## Step-by-Step Implementation

### Creating a New .gitignore File

If your project lacks a `.gitignore` file, create one at the repository root:

1. Create a file named `.gitignore` in your project root
2. Add the exclusion pattern
3. Save and commit the file

```bash
echo "node_modules/" > .gitignore
git add .gitignore
git commit -m "Add .gitignore with node_modules exclusion"

```

### Adding to an Existing .gitignore

If you already have a `.gitignore` file, append the pattern on a new line:

```bash
echo "node_modules/" >> .gitignore
git add .gitignore
git commit -m "Ignore node_modules directory"

```

## Understanding the Pattern Syntax

The trailing slash in `node_modules/` is significant. According to Git's pattern matching rules as implemented in the github/gitignore templates, the slash indicates that Git should match only directories with that name, not files. This prevents accidental exclusion of a file named `node_modules` while ensuring the entire dependency tree is ignored recursively.

## Complete Node.js Template

While `node_modules/` is essential, the full **Node.gitignore** template from github/gitignore covers additional generated files you should exclude. Copy the entire template to handle logs, runtime data, and build artifacts:

```text

# Logs

logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
lerna-debug.log*

# Diagnostic reports

report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json

# Runtime data

pids
*.pid
*.seed
*.pid.lock

# Dependency directories

node_modules/
jspm_packages/
web_modules/

```

After saving this file, stage and commit it:

```bash
git add .gitignore
git commit -m "Add comprehensive Node.js gitignore template"

```

## Summary

- **Pattern**: Use `node_modules/` (with trailing slash) in your `.gitignore` to ignore the directory recursively
- **Source**: The official template lives in `github/gitignore/blob/main/Node.gitignore` at line 40
- **Regeneration**: Dependencies can be restored via `npm install` or `yarn`, so excluding them is safe
- **Scope**: Place the `.gitignore` in your repository root to ensure the rule applies project-wide

## Frequently Asked Questions

### What if node_modules is already tracked by Git?

If Git has already committed the directory, adding it to `.gitignore` will not remove it from the index. You must first untrack it:

```bash
git rm -r --cached node_modules
git commit -m "Remove node_modules from tracking"

```

After this commit, Git will ignore the directory going forward.

### Does the pattern need the trailing slash?

While `node_modules` without the slash would work, the trailing slash in `node_modules/` explicitly tells Git to match only directories. This follows best practices shown in the github/gitignore Node template and avoids ambiguity if a file named `node_modules` ever exists.

### Can I ignore node_modules in all my repositories?

Yes. Create a global `.gitignore` file (e.g., `~/.gitignore_global`) containing `node_modules/`, then configure Git to use it:

```bash
git config --global core.excludesfile ~/.gitignore_global

```

This applies the ignore rule to every repository on your machine without modifying individual project files.

### What other files should I ignore in Node.js projects?

Beyond `node_modules/`, you should typically ignore log files (`*.log`), environment files (`.env`), build output (`dist/`, `build/`), and operating system files (`.DS_Store`, `Thumbs.db`). The complete **Node.gitignore** template in the github/gitignore repository includes comprehensive patterns for all these cases.