Skip to main content

How to Use .gitignore: A Practical Introduction with Examples

Learn how to use .gitignore to keep your Git repository clean. This tutorial covers the basics, common use cases, and practical examples to help you get started!
Mar 3, 2025  · 17 min read

When working with Git, keeping your repository clean and organized isn’t just a best practice—it’s essential for smooth collaboration and efficient version control. That’s where .gitignore comes in. This handy file tells Git which files to ignore, preventing unnecessary clutter and keeping your commits focused on what truly matters.

Without .gitignore, your repo can quickly fill up with temporary files, logs, and other things that don’t belong in version control. Even worse, you might accidentally share sensitive information.

In this tutorial, you’ll learn how to create and use a .gitignore file to keep your project tidy, avoid common pitfalls, and work more effectively with Git. Let’s dive in!

What is a .gitignore File?

A .gitignore file is a configuration file used in Git to instruct the version control system on which files or directories should be ignored when changes are staged or committed. 

It prevents unnecessary files—such as temporary, system-generated, or build-related files—from cluttering your repository. Keeping your repository clean makes collaboration easier and ensures only essential files are tracked.

The .gitignore file is a simple text file placed in the root directory of your Git repository. It contains patterns that tell Git which files or directories to ignore. These patterns can be customized to fit your project’s needs, helping you maintain a well-organized repository.

New to Git and GitHub? Get a beginner-friendly introduction to version control with this GitHub and Git tutorial.

Here are some common categories of files and directories you should consider ignoring:

  • Build artifacts: Files generated during the build process that can be recreated from source code, such as:
    • dist/, build/ (Frontend and backend build outputs)
    • target/ (Java and other compiled language builds)
  • Dependencies: Package management systems create directories for installed libraries, which should not be tracked:
    • node_modules/ (Node.js)
    • vendor/ (PHP, Composer)
    • .venv/, venv/ (Python virtual environments)
  • System-specific files: These files are automatically generated by the operating system and do not contribute to the project:
    • .DS_Store (macOS)
    • Thumbs.db (Windows)
  • IDE configuration files: Each developer may use a different development environment, so their personal settings should not be included in version control:
    • .vscode/ (VS Code)
    • .idea/ (JetBrains IDEs)
    • .project, .settings/ (Eclipse)
  • Logs and temporary files: Logs, caches, and temporary files should be ignored to prevent unnecessary clutter:
    • *.log, npm-debug.log*, yarn-debug.log*, yarn-error.log* (Logs from various tools)
    • *.tmp, *.bak (Temporary and backup files)
    • .mypy_cache/, __pycache__/ (Python caches)
    • .ipynb_checkpoints/ (Jupyter Notebook checkpoints)
  • Environment and secret files: Sensitive credentials and environment-specific configurations should never be committed:
    • .env, .env.local, .env.development, .env.production
    • secrets.json, config.json (Sensitive configuration files)
  • Database and storage files: These are generated locally and should not be included in version control:
    • *.sqlite, *.sqlite3, *.db (SQLite database files)
    • dump.rdb (Redis database dump)
  • CI/CD and coverage files: Test coverage reports and other CI/CD artifacts should be ignored:
    • coverage/, *.lcov (Code coverage reports)
    • .tox/, .pytest_cache/ (Python testing files)

Need to install Git? Follow our step-by-step guide in this Git installation tutorial to get set up quickly.

Learn Git Fundamentals Today

For beginners: Master version control using Git.
Start Learning For Free

Syntax of .gitignore

As mentioned, .gitignore files contain patterns that are matched against file names in your repository to determine whether or not they should be ignored.

Basic syntax

At its core, the .gitignore file consists of lines, each representing a pattern to be ignored. Patterns can match:

  • Specific files
  • File types
  • Directories 

The file also supports comments, which can be added by starting a line with #, and blank lines to improve readability.

Here’s an overview of the basic structure:

  • Ignore a specific file: You can list the file name directly to ignore it.
secrets.txt
  • Ignore an entire directory: By adding a / at the end of the directory name, you can ignore everything inside that directory.
logs/
  • Ignore all files of a specific type: Wildcards (*) can be used to ignore all files with a specific extension.
*.py
  • Negation: You can use ! to negate a pattern and explicitly track certain files or directories that would otherwise be ignored.
*.txt  # Ignores all .txt files
!readme.txt  # Except for readme.txt

How to Create and Use a .gitignore File

Creating and using .gitignore is pretty straightforward. In this section, I will walk through the steps.

Creating a .gitignore file

Step 1: Navigate to the root of your repository. The .gitignore file is typically placed in the root directory of a Git project. Open your terminal or command line and navigate to the root directory of your Git repository:

cd /path/to/your/repo

Step 2: Create the .gitignore file. Once in the root directory, create the .gitignore file using any text editor or by running a command in the terminal, such as:

touch .gitignore

Step 3: Add patterns to the file. Open the .gitignore file in a text editor and add the necessary patterns to ignore files or directories. Each line represents a different pattern.

Here’s an example .gitignore file commonly used in a basic project:

# Ignore node_modules and dependency directories
node_modules/
vendor/

# Ignore build artifacts
dist/
build/
*.log

# Ignore system-generated files
.DS_Store
Thumbs.db

# Ignore environment and secret files
.env
config.json

Once you've added the necessary patterns, save the file. Git will now automatically ignore these files when staging or committing changes.

Step 4: Commit the file to the repository. It’s important to commit the .gitignore file to the repository so that all collaborators use the same ignore rules. This ensures consistency across the project for everyone involved.

git add .gitignore
git commit -m "Add .gitignore file"
git push

Once the .gitignore file is committed, you establish shared ignore rules for the entire team.

Want to master pushing and pulling in Git? Learn how to sync your work with remote repositories in this Git push and pull tutorial.

Best Practices for Using .gitignore

While creating a .gitignore file is a straightforward part of maintaining a clean Git repository, several best practices should be followed to ensure the file is managed effectively over time.

Use a global .gitignore

For developers working across multiple projects, there are specific files that you may want to exclude from every repository, regardless of the project type.

Instead of adding them to each project’s .gitignore file, you can configure a global .gitignore that applies to all repositories on your system.

To configure a global .gitignore file:

  • Create a .gitignore_global file:
touch ~/.gitignore_global
  • Add patterns for files that you want to ignore globally, such as:
.DS_Store
*.log
/.vscode/
/.idea/
  • Set Git to use the global .gitignore:
git config --global core.excludesfile ~/.gitignore_global

Leverage existing templates

Instead of building a .gitignore file from scratch for each new project, you can leverage pre-configured .gitignore templates for specific languages, frameworks, or environments.

One of the best resources for these templates is GitHub’s official .gitignore repository, where you can find .gitignore files tailored to hundreds of programming languages and frameworks.

Review .gitignore regularly

As projects evolve, new files and directories might need to be included in the .gitignore file. It’s important to periodically review and update your file to reflect the current state of your projects.

Some scenarios where you might need to update the .gitignore file include:

  • Adopting new tools or libraries that generate additional files (e.g., switching to a new build system).
  • Refactoring or reorganizing directories, which might result in new files that should be excluded.
  • Removing obsolete files or directories that are no longer part of the project.

Troubleshooting .gitignore

Even after setting up a .gitignore file, you may encounter scenarios where specific files are being tracked, or patterns don’t seem to work as expected. This section will cover two common troubleshooting areas and how to resolve them.

Tracking files already committed 

The .gitignore file doesn’t retroactively apply to files already committed. 

If you add a pattern to .gitignore after certain files have already been committed, Git will continue to track them even though they match the pattern in the .gitignore file.

To stop tracking files that have already been committed, follow these steps:

  • Remove the files from Git’s tracking: Use the git rm command to remove them from the repository while keeping them in your working directory.
git rm --cached <file_or_directory_name>
  • Commit the changes: After removing the files from Git’s tracking, commit the changes to ensure that the files are no longer part of the version control history.
git commit -m "Stop tracking ignored files"
  • Push the changes to the remote repository: Finally, push the changes to the remote repository to ensure that the files are no longer tracked.
git push

After performing these steps, Git will stop tracking the files. The committed file will still be in your working directory but will be ignored by future commits based on your .gitignore patterns.

Ensure patterns are working 

Sometimes, you may notice that specific files you expected to be ignored still show up in Git’s status or are being tracked. 

Follow these steps to ensure that your .gitignore patterns are working correctly:

  • Check the status of your files: Use the git status command to see which files are being tracked by Git. This will help you verify if your ignored files are still listed.
git status
  • Ensure the pattern is correct: Double-check the syntax of your .gitignore patterns to ensure they are properly formatted. For instance:
    • Ensure you use the correct directory path (relative to the repository's root).
    • Add a / to target specific directories to prevent tracking all files with similar names.
  • Refresh the cache: If you’ve recently updated your .gitignore file and the changes are not being applied, Git might be holding onto its previous cache. To refresh the cache, run the following command:
git rm -r --cached .
git add .
git commit -m "Refresh .gitignore"
  • Check for exceptions: Sometimes, a specific pattern in .gitignore might be overridden by a more specific pattern elsewhere in the file. Review your rules to ensure that there are no conflicting patterns.

Looking for a quick Git reference? Keep essential commands at your fingertips with this Git cheat sheet.

Conclusion

A .gitignore file might seem small, but it plays a huge role in keeping your Git repository clean and manageable. By ignoring unnecessary files—like dependencies, build artifacts, and system-generated files—you ensure your project stays organized and free from clutter.

In this tutorial, you’ve learned how to create a .gitignore file, add patterns, and apply best practices to keep your repo efficient. With these skills, you’ll avoid version control headaches and make collaboration smoother for everyone on your team.

If you're looking to deepen your Git skills, check out Git Fundamentals for a structured learning path. You can also explore hands-on courses like Foundations of Git and Introduction to GitHub Concepts to build a solid understanding of version control and collaboration workflows!

Learn Git Fundamentals Today

For beginners: Master version control using Git.

FAQs

Does .gitignore remove files that are already tracked by Git?

No, .gitignore only prevents new files from being tracked. If a file is already in version control, adding it to .gitignore won’t remove it. To stop tracking a file that’s already committed, you need to use:

git rm --cached filename

Then, commit the changes.

Can I have multiple .gitignore files in a project?

Yes! You can place .gitignore files in different directories within your project. Each one applies only to files in its directory and subdirectories.

How do I ignore all files of a certain type?

You can use wildcards. For example, to ignore all .log files:

*.log

This will exclude all files with the .log extension.

Can I ignore a specific file but still track it for my own work?

Yes, but you must manually ensure it doesn’t get committed. One way to do this is using git update-index --assume-unchanged filename, a temporary solution. A better approach is to use a global .gitignore file (see next question).

What is a global .gitignore file, and how do I set it up?

A global .gitignore is used to ignore files across all repositories on your machine. This is useful for system-specific files like .DS_Store or Thumbs.db. To create and configure a global .gitignore:

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

Then, add patterns to ~/.gitignore_global as needed.

Why isn’t my .gitignore file working?

If .gitignore isn’t ignoring a file, check for these common issues:

  • The file is already tracked—you need to remove it using git rm --cached filename.
  • The .gitignore pattern might be incorrect—double-check your syntax.
  • There’s a conflicting rule—Git applies the last matching rule, so order matters.

Can I ignore a directory but keep a specific file inside it?

Yes! Use an exclusion rule. For example, to ignore everything in a folder except keepme.txt:

folder_name/*
!folder_name/keepme.txt

What happens if two team members have different .gitignore files?

If .gitignore is committed to the repository, all team members will follow the same rules. However, if one person modifies .gitignore locally but doesn’t commit the change, they may have different ignored files. It’s best to keep .gitignore versioned and agreed upon by the team.

How can I check which files are being ignored?

Run the following command to see what .gitignore is excluding:

git status --ignored

Or, for a more detailed list:

git check-ignore -v filename

Can I undo ignoring a file in .gitignore?

Yes! Remove the file from .gitignore and then track it again using:

git add filename

Then, commit the changes.


Kurtis Pykes 's photo
Author
Kurtis Pykes
LinkedIn
Topics

Learn more about Git with these courses!

course

Introduction to Git

2 hr
15.2K
Discover the fundamentals of Git for version control in your software and data projects.
See DetailsRight Arrow
Start Course
See MoreRight Arrow
Related

tutorial

Git Switch Branch: A Guide With Practical Examples

Learn how to switch a branch in Git using git switch and understand the differences between git switch and git checkout.
François Aubry's photo

François Aubry

8 min

tutorial

GitHub and Git Tutorial for Beginners

A beginner's tutorial demonstrating how Git version control works and why it is crucial for data science projects.
Abid Ali Awan's photo

Abid Ali Awan

17 min

tutorial

Git Squash Commits: A Guide With Examples

Learn how to squash commits on a branch using interactive rebase, which helps maintain a clean and organized commit history.
François Aubry's photo

François Aubry

7 min

tutorial

Git Setup: The Definitive Guide

In this tutorial, you'll learn how to set up Git on your computer in different operating systems.

Olivia Smith

7 min

tutorial

Git Reset and Revert Tutorial for Beginners

Discover how to use Git reset and revert to manage your project history. Practice with detailed examples using soft, mixed, and hard resets. Learn the difference between Git reset and revert.
Zoumana Keita 's photo

Zoumana Keita

10 min

tutorial

Git Install Tutorial

Learn about Git initial setup, Git LFS, and user-friendly Git GUI applications in this in-depth tutorial.
Abid Ali Awan's photo

Abid Ali Awan

9 min

See MoreSee More