Git Toolkit: .gitignore and Commit Messages

Paste paths to see which line of your .gitignore ignores them, or does not. If a parent folder is excluded, the page also shows why a ! line cannot bring a file back. The rules follow git, and nothing leaves your browser.

On-device・No uploadMobile friendlyWorks offline

Your files and input are processed only inside your browser on this device and are never uploaded to our servers.

Choose a tool
Contents of .gitignorePaste the .gitignore from your project root, or choose the file.

Paths relative to the repository root. A path ending with / is treated as a folder (for example build/).

A file that Git already tracks is not ignored by a .gitignore entry. To stop tracking it, run git rm --cached <file> and then add it to .gitignore.

How to use

  1. Paste your project root .gitignore into “.gitignore contents”, or choose the file.

  2. Enter the paths to test in “Paths to check”, one per line. “Choose a folder” reads only the names and lists them.

  3. Read the “Deciding line” to see which rule settled the result. If a parent folder is excluded, that folder is named.

  4. Use “Make a .gitignore” to combine common presets such as Node, Python or Java, then copy or save the file.

  5. Paste a commit message in “Commit message” to check the Conventional Commits format and the subject length.

What it does

Per-path verdicts with the deciding line

For each path the last matching line is shown with its line number, so you know which line to change.

Parent-folder exclusion as in git

As in git, a file inside an excluded folder is not brought back by a “!” line. The page reproduces this.

Judged by the pattern rules of git

Handles the slash position (anchored or not), a trailing slash (folders only), **, !, escaped # and !, trailing spaces and [...] brackets, as in the git documentation.

Generate from common presets

Choose Node.js, Python, Java, Go, macOS, Windows, JetBrains or VS Code. Duplicate lines are removed, and the source is written in the file.

Commit message format check

Checks Conventional Commits 1.0.0: type(scope)!: description, body, footers and BREAKING CHANGE, and shows the subject length.

Folders: names only

Choosing a folder reads only the file names. Contents are not read and nothing is sent anywhere.

Use cases

  • Find out why a file is not ignored although it is in .gitignore, or is ignored when it should not be
  • A “!” rule does not bring a file back. Check whether a parent folder is excluded
  • Create a .gitignore quickly for a new Node or Python project
  • Keep the team’s commit messages in the form “type(scope): description”
  • Check the git rm --cached steps for a file that is already tracked

Capability matrix

FeatureSupportNotes
Per-path verdict (ignored or not) from .gitignoreSupported—
Deciding line with its number, and parent-folder exclusionSupported—
Negation (!), **, [...] and the trailing-slash ruleSupportedFollows the git PATTERN FORMAT
.gitignore generation from common itemsPartialAn excerpt of 8 presets, not every template
Commit message format and subject length checkSupported—
Judging the quality of a commit message’s contentNot supportedOnly format and length are checked
.gitignore in subfolders, .git/info/exclude, global excludesNot supportedNot read
Verdicts for files already tracked by GitNot supportedShows the git rm --cached steps instead
Running git commands or accessing a repositoryNot supported—
Reading paths from a folderPartialFile names only; contents are not read

Limits & notes

  • The .gitignore is limited to 500,000 characters and 5,000 lines; up to 5,000 paths are checked.
  • Case is significant by default, as on Linux. With core.ignorecase enabled it is not.
  • A file that Git already tracks is not ignored by .gitignore. This note is always shown.
  • Confirm real results with git check-ignore -v in a repository. This tool does not replace it.

Privacy & safety

The .gitignore, the paths and the commit message are processed only in your browser. Nothing is sent or stored. When you choose a folder, only file names are read. Closing the page clears everything.

FAQ

Why is a file not ignored although it is in .gitignore?
A common reason is that Git already tracks the file. To stop tracking it, run git rm --cached on it and then add it to .gitignore. Other causes include a .gitignore in the wrong folder or trailing spaces on a line.
Why does a “!” line not bring the file back?
A parent folder is excluded. In git, a file inside an excluded folder cannot be brought back by a “!” line. Bring back the folder itself, or write the rule as “folder/*” so the folder is not excluded.
What does a “/” in a .gitignore line mean?
A “/” at the start or in the middle anchors the pattern to the folder that holds the .gitignore (for example /TODO matches only the top level). A “/” at the end means the rule applies to folders only.
How should a commit message look?
Conventional Commits 1.0.0 asks for “type(scope)!: description” on the first line, then a blank line, an optional body and footers. A breaking change is marked with “!” or a “BREAKING CHANGE:” footer.
How long should the subject be?
About 50 characters is the guide. Over 72 characters, logs and review screens tend to wrap it. This is a common convention, not a rule of git.
Where do the .gitignore templates come from?
They are edited excerpts of github/gitignore (CC0 1.0). The source is written at the top of the generated file.

Diff Tool — Text & Code Compare

Paste or drop two versions and see added and removed lines, plus the exact words that changed inside each line. Copy or save the result as a unified patch. Nothing leaves your browser.

No upload

Regex Tester

Type a pattern and matches light up in the test string instantly. Capture groups, replacement output and what each part of the pattern means are all on one screen — and patterns that would freeze your browser are stopped after one second.

No upload

Text Studio — Character Counter & Text Cleaner

Paste text to see characters, words, lines and bytes instantly, then clean it up in one click — change case, remove duplicate or blank lines, sort naturally, convert line breaks. Every action reports what changed and can be undone.

No upload

UUID / ULID / NanoID / Token Generator

A UUID is ready the moment the page opens. Switch to UUID v7, ULID, NanoID or a random token, generate up to 10,000 at once and save them as .txt, .csv or .json. Paste an existing UUID or ULID to read its embedded time and version.

No upload

JSON Studio — Formatter & Validator

Paste JSON to format, minify or validate it instantly. Errors are shown with the exact line, column and cause, and comments or trailing commas can be auto-repaired. Your data never leaves your device.

No upload

Code Formatter — Format & Minify

Paste code to format it with the language auto-detected. Choose indent, line width, semicolons, quotes and trailing commas; JavaScript, CSS and HTML can also be minified with before/after size and reduction. Your code never leaves the browser.

No upload

Last updated: