# branch

{% hint style="success" %}
This is the official documentation of the `@forestadmin/agent` Node.js agent.
{% endhint %}

The `forest branch` command is at the center of what your Forest Admin development workflow should look like. As explained on [this page](https://docs.forestadmin.com/developer-guide-agents-nodejs/deploying-to-production/using-branches), it allows you to manage your layouts, a bit like you would use git's branches for your code.

```
$ forest branch --help
Create a new branch or list your existing branches.

USAGE
  $ forest branch [BRANCH_NAME]

ARGUMENTS
  BRANCH_NAME  The name of the branch to create.

OPTIONS
  -d, --delete            Delete the branch.
  -f, --format=table|json [default: table] Output format.
  -o, --origin=origin     Set the origin of the created branch.
  --force                 When deleting a branch, skip confirmation.
  --help                  Display usage information.
  --projectId=projectId   The id of the project to create a branch in.
```

Here are a few extra details on how it works.

The `forest branch` command has 3 uses, depending on how you use it:

* **list** branches,
* **create** branches,
* **delete** branches.

#### Listing existing branches

To list your existing branches, run `forest branch`:

```
$ forest branch
NAME                    ORIGIN      IS CURRENT  CLOSED AT
feature/new-button      production  ✅
fix-missing-label       staging
feature/remove-tooltip  preprod                 2022-08-19T08:08:47.678Z
```

{% hint style="info" %}
The `IS CURRENT` column indicates your currently selected branch: your Development Environment layouts will be displayed according to this branch's layout configuration.
{% endhint %}

#### Creating a new branch

To create a new branch, append the name of the branch you wish to create after `forest branch`, like so:

```
$ forest branch feature/new-ops-feature --origin production
✅ Switched to new branch: feature/new-ops-feature
```

{% hint style="warning" %}
There is no specific constraint on branch names, though kebab-case is generally used.

However, keep in mind that your branch *name* must be **unique** in the project.
{% endhint %}

{% hint style="info" %}
Note that your project must be deployed remotely before you can start using branches:
{% endhint %}

```
$ forest branch add-refund-action
❌ You cannot create a branch until this project has either a remote or a production environment.
```

Any branch reflects layout changes (i.e. configuration changes in your UI) that you've made on that branch. To make this possible, a branch needs an **origin**, which is the state of the layout you started from and made these layout changes on. This is why you need to [have a Production Environment](https://docs.forestadmin.com/developer-guide-agents-nodejs/environments#deploying-to-production) (ideally) or simply a Remote Environment: those Environments can serve as the origin of your branches.

#### Deleting a branch

To delete a branch, use the `-d` option and a branch name to the `forest branch` command:

```
$ forest branch -d hotfix/fix-dropdown-issue
[? Delete branch "hotfix/fix-dropdown-issue"? Y
✅ Branch hotfix/fix-dropdown-issue successfully deleted.
```

{% hint style="info" %}
You will be prompted for confirmation before deleting a branch. To skip that confirmation, use the `--force` option.
{% endhint %}
