In Neon, you can provision Postgres databases in < 1s. Don't believe us? Check out this demo

Branching with the Neon CLI

Learn how to create and delete branches with the Neon CLI

The examples in this guide demonstrate creating, viewing, and deleting branches using the Neon CLI. For other branch-related CLI commands, refer to Neon CLI commands — branches. This guide also describes how to use the --api-key option to authenticate CLI branching commands from the command line.

The examples show the default table output format. The Neon CLI also supports json and yaml output formats. For example, if you prefer output in json, add --output json to your Neon CLI command.

Prerequisites

Create a branch with the CLI

The following Neon CLI command creates a branch. If your Neon account has more than one project, you will be required to specify a project ID using the --project-id option. To view the CLI documentation for this command, refer to the Neon CLI reference. The command response includes the branch ID, the compute endpoint ID, and and the connection URI for connecting to the branch.

tip

You can use the --name option with a neonctl branches create command to specify your own branch name instead of using the name generated by Neon. For example: neonctl branches create --name mybranch. Also, for any Neon CLI command, you can specify --output json to change the command output from the default table format to JSON format.

neonctl branches create

branch
┌───────────────────────┬───────────────────────┬─────────┬──────────────────────┬──────────────────────┐
 Id Name Primary Created At Updated At
├───────────────────────┼───────────────────────┼─────────┼──────────────────────┼──────────────────────┤
 br-lucky-mud-08878834 br-lucky-mud-08878834 false 2023-07-24T20:22:42Z 2023-07-24T20:22:42Z
└───────────────────────┴───────────────────────┴─────────┴──────────────────────┴──────────────────────┘
endpoints
┌────────────────────────┬──────────────────────┐
 Id Created At
├────────────────────────┼──────────────────────┤
 ep-mute-voice-52609794 2023-07-24T20:22:42Z
└────────────────────────┴──────────────────────┘
connection_uris
┌───────────────────────────────────────────────────────────────────────────────────────┐
 Connection Uri
├───────────────────────────────────────────────────────────────────────────────────────┤
 postgres://[user]:[password]@[neon_hostname]/[dbname]
└───────────────────────────────────────────────────────────────────────────────────────┘

tip

The Neon CLI provides a neonctl connection-string command you can use to extract a connection uri programmatically. See Neon CLI commands — connection-string.

Create a branch from a non-default parent

Using the option --parent, you can specify any non-default branch that you want to use as the parent for your new branch, depending on the needs of your development workflow.

In this example, we're creating a branch for a hotfix called alex/hotfix using the long-lived development branch dev/alex as the parent:

neon branches create --name alex/hotfix --parent dev/alex --project-id crimson-voice-12345678
branch
┌───────────────────────┬─────────────┬─────────┬──────────────────────┬──────────────────────┐
 Id Name Primary Created At Updated At
├───────────────────────┼─────────────┼─────────┼──────────────────────┼──────────────────────┤
 br-misty-mud-a5poo34s alex/hotfix false 2024-04-23T17:04:10Z 2024-04-23T17:04:10Z
└───────────────────────┴─────────────┴─────────┴──────────────────────┴──────────────────────┘
endpoints
┌──────────────────────────┬──────────────────────┐
 Id Created At
├──────────────────────────┼──────────────────────┤
 ep-orange-heart-123456 2024-04-23T17:04:10Z
└──────────────────────────┴──────────────────────┘
connection_uris
┌──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
 Connection Uri
├──────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
 postgres://neondb_owner:123456@ep-orange-heart-a54grm9j.us-east-2.aws.neon.tech/neondb?sslmode=require
└──────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

List branches with the CLI

The following Neon CLI command lists all branches in your Neon project, as well as any branches shared with you. If your Neon account has more than one project, you will be required to specify a project ID using the --project-id option. To view the CLI documentation for this method, refer to the Neon CLI reference.

neonctl projects list
Projects
┌────────────────────────┬────────────────────┬───────────────┬──────────────────────┐
 Id Name Region Id Created At
├────────────────────────┼────────────────────┼───────────────┼──────────────────────┤
 crimson-voice-12345678 frontend aws-us-east-2 2024-04-15T11:17:30Z
├────────────────────────┼────────────────────┼───────────────┼──────────────────────┤
 calm-thunder-12121212 backend aws-us-east-2 2024-04-10T15:21:01Z
├────────────────────────┼────────────────────┼───────────────┼──────────────────────┤
 nameless-hall-87654321 billing aws-us-east-2 2024-04-10T14:35:17Z
└────────────────────────┴────────────────────┴───────────────┴──────────────────────┘
Shared with me
┌───────────────────┬────────────────────┬──────────────────┬──────────────────────┐
 Id Name Region Id Created At
├───────────────────┼────────────────────┼──────────────────┼──────────────────────┤
 noisy-fire-212121 API aws-eu-central-1 2023-04-22T18:41:13Z
└───────────────────┴────────────────────┴──────────────────┴──────────────────────┘

Delete a branch with the CLI

The following Neon CLI command deletes the specified branch. If your Neon account has more than one project, you will be required to specify a project ID using the --project-id option. To view the CLI documentation for this command, refer to the Neon CLI reference. You can delete a branch by its ID or name.

neonctl branches delete br-rough-sky-158193
┌───────────────────────┬───────────────────────┬─────────┬──────────────────────┬──────────────────────┐
 Id Name Primary Created At Updated At
├───────────────────────┼───────────────────────┼─────────┼──────────────────────┼──────────────────────┤
 br-lucky-mud-08878834 br-lucky-mud-08878834 false 2023-07-24T20:22:42Z 2023-07-24T20:44:51Z
└───────────────────────┴───────────────────────┴─────────┴──────────────────────┴──────────────────────┘

Branching automation with the Neon CLI

The Neon CLI enables easy automation of branching operations for integration into your workflows or toolchains. To facilitate authentication to Neon when running a CLI command, the Neon CLI allows you to use an API key. For information about obtaining an API key, see Create an API key.

To use an API key, you can store it in an environment variable on your system. This prevents the key from being hardcoded into your automation scripts or exposed in another way. For example, you can add the following line to your shell's profile file (.bashrc or .bash_profile for bash shell):

export NEON_API_KEY=<neon_api_key>

After exporting your key, source the profile file (source ~/.bashrc or source ~/.bash_profile), or start a new terminal session.

You do not need to specify the variable name explicitly when using a Neon CLI command. A Neon CLI command looks for a NEON_API_KEY variable setting by default.

This API key configuration ensures that the API key is kept secure while still providing a way to authenticate your CLI commands. Remember, you should handle your API key with the same level of security as your other credentials.

Resetting a branch from its parent

Depending on your development workflow, you might need to periodically reset a branch to match the latest state of its parent. This is useful, for example, when resetting a long-lived development branch back to the main branch before starting work on a new feature.

Use the following command to reset a branch to the current state (HEAD) of its parent branch:

neonctl branches reset <id|name> --parent

Example:

This example resets a developer's branch to match the latest state of its parent branch:

neonctl branches reset dev/alex --parent
┌────────────────────────────┬──────────┬─────────┬──────────────────────┬──────────────────────┐
 Id Name Primary Created At Last Reset At
├────────────────────────────┼──────────┼─────────┼──────────────────────┼──────────────────────┤
 br-twilight-smoke-123456 dev/alex false 2024-04-23T17:01:49Z 2024-04-23T17:57:35Z

If the branch you want to reset has child branches, you need to include the preserve-under-name parameter. This will save the current state of your branch under a new name before performing the reset. The child branches will then show this newly named branch as their parent. This step ensures that your original branch can be reset cleanly, as all child branches will have been transferred to the new parent name.

For example, here we are resetting dev/alex to its parent while preserving its latest state under the branch name dev/alex_backup:

neon branches reset dev/alex --parent --preserve-under-name dev/alex_backup
┌────────────────────────────┬──────────┬─────────┬──────────────────────┬──────────────────────┐
 Id Name Primary Created At Last Reset At
├────────────────────────────┼──────────┼─────────┼──────────────────────┼──────────────────────┤
 br-twilight-smoke-a5ofkxry dev/alex false 2024-04-23T17:01:49Z 2024-04-23T18:02:36Z

For more details, see Reset from parent.

Restoring a branch to its own or another branch's history

Using the CLI, you can restore a branch to an earlier point in its history or another branch's history using the following command:

neonctl branches restore <target id|name> <source id|name @ timestamp|lsn>

This command restores the branch main to an earlier timestamp in it's own history, saving to a backup branch called main_restore_backup_2024-02-20

neonctl branches restore main ^self@2024-05-06T10:00:00.000Z --preserve-under-name main_restore_backup_2024-05-06

Results of the operation:

INFO: Restoring branch br-purple-dust-a5hok5mk to the branch br-purple-dust-a5hok5mk timestamp 2024-05-06T10:00:00.000Z
Restored branch
┌─────────────────────────┬──────┬──────────────────────┐
 Id Name Last Reset At
├─────────────────────────┼──────┼──────────────────────┤
 br-purple-dust-a5hok5mk main 2024-05-07T09:45:21Z
└─────────────────────────┴──────┴──────────────────────┘
Backup branch
┌─────────────────────────┬────────────────────────────────┐
 Id Name
├─────────────────────────┼────────────────────────────────┤
 br-flat-forest-a5z016gm main_restore_backup_2024-05-06
└─────────────────────────┴────────────────────────────────┘

For full details about the different restore options available with this command, see Restoring using the CLI.

Need help?

Join our Discord Server to ask questions or see what others are doing with Neon. Users on paid plans can open a support ticket from the console. For more detail, see Getting Support.

Last updated on

Edit this page
Was this page helpful?