git town ship

git town ship [--to-parent] [--message <text>] [branch-name]

Notice: Most people don't need to use this command. The recommended way to merge your feature branches is to use the web UI or merge queue of your code hosting service, as you would normally do. git town ship is for edge cases like developing in offline mode or when shipping stacked changes.

The ship command ("let's ship this feature") merges a completed feature branch into the main branch and removes the feature branch.

The branch to ship must be in sync. If it isn't in sync, git town ship will exit with an error. When that happens, run git town sync to get the branch in sync, re-test and re-review the updated branch, and then run git town ship again.

Positional argument

When called without a positional argument, the ship command ships the current branch.

When called with a positional argument, it ships the branch with the given name.

--dry-run

Use the --dry-run flag to test-drive this command. It prints the Git commands that would be run but doesn't execute them.

--message / -m

Similar to git commit, the --message <message> aka -m parameter allows specifying the commit message via the CLI.

--strategy / -s

Overrides the configured ship-strategy. Allowed values:

  • api
  • fast-forward
  • squash-merge

--to-parent / -p

The ship command ships only direct children of the main branch. To ship a child branch, you need to first ship or delete all its ancestor branches. If you really want to ship into a non-perennial branch, you can override the protection against that with the --to-parent aka -p option.

--verbose / -v

The --verbose aka -v flag prints all Git commands run under the hood to determine the repository state.

Configuration

The configured ship-strategy determines how the ship command merges branches. When shipping stacked changes, use the fast-forward ship strategy to avoid empty merge conflicts.

If you have configured the API tokens for GitHub, GitLab, or Gitea and the branch to be shipped has an open proposal, this command merges the proposal for the current branch on your origin server rather than on the local Git workspace.

If your origin server deletes shipped branches, for example GitHub's feature to automatically delete head branches, you can disable deleting remote branches.