# git-branch-is

> Assert that the name of the current branch of a git repository has a particular value.

Latest version **5.0.0** (published 2026-05-30) · MIT license · 0 weekly downloads

## Install

```sh
npm install git-branch-is
pnpm add git-branch-is
yarn add git-branch-is
bun add git-branch-is
```

Provides the command `git-branch-is`.

## Health

**Score 68/100 (B)** — status: active.

Positive: has types package; esm support; no vulnerabilities; has provenance; high maintenance score; high quality score.

Warnings: low downloads.

## Facts

| | |
|---|---|
| Version | 5.0.0 |
| Published | 2026-05-30 |
| First published | 2016-04-02 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | separate (@types/git-branch-is) |
| Module format | ESM + CommonJS |
| Node | ^20.19 \|\| >=22.12 |
| Dependencies | 1 |
| Unpacked size | 21.2 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Provenance | attested (GitHub Actions) |
| GitHub stars | 93 |
| Author | Kevin Locke |
| Maintainers | kevinoid |
| Keywords | assert, assertion, cli, git, test |

## Links

- npm: https://www.npmjs.com/package/git-branch-is
- Repository: https://github.com/kevinoid/git-branch-is
- Issues: https://github.com/kevinoid/git-branch-is/issues
- npm.io page: https://npm.io/package/git-branch-is

## Dependencies (1)

- [commander](https://npm.io/package/commander.md) ^15.0.0

## Alternatives

- [duck](https://npm.io/package/duck.md) — 4.2M weekly downloads
- [ava](https://npm.io/package/ava.md) — 560.2K weekly downloads
- [storybook-addon-module-mock](https://npm.io/package/storybook-addon-module-mock.md) — 71.7K weekly downloads
- [vest](https://npm.io/package/vest.md) — 50.1K weekly downloads
- [@ethereum-waffle/mock-contract](https://npm.io/package/@ethereum-waffle/mock-contract.md) — 40.0K weekly downloads

## Recent versions

- 5.0.0 (latest) — 2026-05-30
- 4.0.0 — 2020-07-31
- 3.1.0 — 2019-11-17
- 3.0.0 — 2019-08-09
- 2.1.0 — 2018-09-27
- 2.0.0 — 2018-06-29
- 1.0.0 — 2018-06-01
- 0.1.0 — 2016-04-02

## README

`git-branch-is`
===============

[![Build Status](https://img.shields.io/github/actions/workflow/status/kevinoid/git-branch-is/node.js.yml?branch=main&style=flat&label=build)](https://github.com/kevinoid/git-branch-is/actions/workflows/node.js.yml?query=branch%3Amain)
[![Coverage](https://img.shields.io/codecov/c/github/kevinoid/git-branch-is/main.svg?style=flat)](https://app.codecov.io/gh/kevinoid/git-branch-is/branch/main)
[![Dependency Status](https://img.shields.io/librariesio/release/npm/git-branch-is.svg?style=flat)](https://libraries.io/npm/git-branch-is)
[![Supported Node Version](https://img.shields.io/node/v/git-branch-is.svg?style=flat)](https://www.npmjs.com/package/git-branch-is)
[![Version on NPM](https://img.shields.io/npm/v/git-branch-is.svg?style=flat)](https://www.npmjs.com/package/git-branch-is)

Assert that the name of the current branch of a git repository has a particular value.

## Introductory Example

To check that the current branch is named `release` and print an error if not,
run the following command:

```
$ git-branch-is release
Error: Current branch is "main", not "release".
$ echo $?
1
```

This can be useful as part of a [`preversion`
script](https://docs.npmjs.com/cli/version) in `package.json`:

```json
{
  "name": "super-cool-package",
  "version": "1.2.3",
  "scripts": {
    "preversion": "git-branch-is release && echo Preversion checks passed."
  }
}
```

## Installation

[This package](https://www.npmjs.com/package/browserify) can be installed
using [npm](https://www.npmjs.com/), either globally or locally, by running:

```sh
npm install git-branch-is
```

## Command Usage

The command options are intended to be similar to `git` and are documented in
the `--help` output:

```
Usage: git-branch-is [options] <branch name>

Options:
  -C <path>           run as if started in <path>
  --git-arg <arg>     additional argument to git (can be repeated) (default: [])
  --git-dir <dir>     set the path to the repository
  --git-path <path>   set the path to the git binary
  -i, --ignore-case   compare/match branch name case-insensitively
  -I, --invert-match  inverts/negates comparison
  --not               inverts/negates comparison (same as --invert-match)
  -q, --quiet         suppress warning message if branch differs
  -r, --regex         match <branch name> as a regular expression
  -v, --verbose       print a message if the branch matches
  -V, --version       output the version number
  -h, --help          output usage information
```

## Additional Command Examples

### Regular Expression Matching

To check that the current branch starts with `release/` using a regular
expression:

```
$ git-branch-is -r "^release/"
Error: Current branch "main" does not match "^release/".
$ echo $?
1
```

Note:  Be careful to quote patterns to avoid shell expansion or special
handling (e.g. POSIX shells expand `*` and `cmd.exe` treats `^` specially).

### Case-Insensitive Matching

To check that the current branch starts with `release/` case-insensitively
using a regular expression:

```
$ git-branch-is -i -r "^release/"
Error: Current branch "main" does not match "^release/".
$ echo $?
1
```

### Inverted/Negated Matching

To check that the current branch is not `main`, use `-I`, `--invert-match`,
or `--not` (all functionally equivalent, use whichever you prefer):

```
$ git-branch-is --not main
Error: Current branch is "main".
$ echo $?
1
```

## API Usage

To use the API with a callback function:

```js
const gitBranchIs = require('git-branch-is');
gitBranchIs('main', function(err, result) {
  if (err) console.error(err);
  else console.log(result ? 'On main' : 'Not on main');
});
```

Alternatively, if a callback is not provided, `gitBranchIs` will return a
`Promise`:

```js
const gitBranchIs = require('git-branch-is');
gitBranchIs('main').then(
  function(result) { console.log(result ? 'On main' : 'Not on main'); },
  function(err) { console.error(err); }
);
```

Additionally, instead of a string, a checking function can be passed to
perform arbitrary checking against the branch name:

```js
const gitBranchIs = require('git-branch-is');
gitBranchIs(function(branchName) { /^main$/.test(branchName); }).then(
  function(result) { console.log(result ? 'On main' : 'Not on main'); },
  function(err) { console.error(err); }
);
```

## API Docs

To use this module as a library, see the [API
Documentation](https://kevinoid.github.io/git-branch-is/api).

## Rationale

What's the value of this command over scripting with `git` directly?  Good
question.  The [Introductory Example](#introductory-example) could instead be
approximated with the following:

```json
{
  "name": "super-cool-package",
  "version": "1.2.3",
  "scripts": {
    "preversion": "if [ \"$(git symbolic-ref HEAD)\" = release ] ; then echo Preversion checks passed. ; else echo Error: Not on branch release. ; exit 1 ; fi"
  }
}
```

For packages which are only targeting POSIX systems, this may be a preferable
solution.  However, it doesn't work on systems which don't support the POSIX
shell language (e.g. Windows, which runs scripts in `cmd.exe`).  To support
these systems it is necessary to either introduce a dependency on Bash, to
use this script, or code up something else.

## Contributing

Contributions are appreciated.  Contributors agree to abide by the [Contributor
Covenant Code of
Conduct](https://www.contributor-covenant.org/version/1/4/code-of-conduct.html).
If this is your first time contributing to a Free and Open Source Software
project, consider reading [How to Contribute to Open
Source](https://opensource.guide/how-to-contribute/)
in the Open Source Guides.

If the desired change is large, complex, backwards-incompatible, can have
significantly differing implementations, or may not be in scope for this
project, opening an issue before writing the code can avoid frustration and
save a lot of time and effort.

## License

This project is available under the terms of the [MIT License](LICENSE.txt).
See the [summary at TLDRLegal](https://tldrlegal.com/license/mit-license).

---
_Source: https://npm.io/package/git-branch-is · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
