Skip to main content

Frequently Asked Questions

The docs talk about the commit header, description, types… What are those?​

If you are using Conventional Commits, the commit message is divided into these parts:

  • Type: The first word of the header. It describes the kind of change that the commit is introducing (e.g. feat or fix).
  • Scope (optional): The part of the codebase that is affected by the change (e.g. docs or cli).
  • Description: The rest of the header, after the type and scope.
  • Body (optional): Separated from the header by a blank line, it contains a more detailed description of the changes.
  • Footer(s) (optional): A word token followed by either the separator :<space> or <space>#, followed by a string value (e.g. BREAKING CHANGE:, Closes, Fixes).

For non-conventional commits users, the commit message is divided into three parts:

  • Header: The entire first line of the commit message.
  • Description: Same as the header (sans Gitmoji, if present).
  • Body: Anything after the first line.

How do I force a commit in spite of linting errors?​

You can use the --force flag:

git sumi --force 'wip'

My team has very specific requirements not covered by the rules. What can I do?​

You can use a custom pattern that commit headers must match. For example, if you want to enforce the use of a JIRA issue key as the first element in the commit header, you can use the following (regex) pattern:

header_pattern = '^JIRA-\d+: +'

If this is still not enough, please open an issue.

Can I enforce the rules only on the main branch?​

Yes. If you're using the commit-msg hook (git sumi --init commit-msg), modify it so it only runs on the main branch:

.git/hooks/commit-msg
#!/usr/bin/env bash

# Commit-msg hook generated by git-sumi.
# For more information and documentation, visit: https://sumi.rs

set -e # Exit on any error.

get_current_branch() {
# Check if HEAD exists (i.e., if there are any commits).
if git rev-parse --verify HEAD >/dev/null 2>&1; then
git rev-parse --abbrev-ref HEAD
else
echo "main" # Assume 'main' for initial commit.
fi
}

current_branch=$(get_current_branch)

# Check if the current branch is 'main'.
if [ "$current_branch" != "main" ]; then
exit 0 # Exit successfully without running git-sumi.
fi

# Check if git-sumi is installed.
if ! command -v git-sumi &> /dev/null
then
echo "git-sumi is not installed. Please install it. See https://sumi.rs for instructions."
echo "Alternatively, edit or remove the commit-msg hook in .git/hooks/commit-msg."
exit 1
fi

# Run git-sumi on the commit message if on the 'main' branch.
git-sumi -- "$(cat $1)" # Exit with error if linting fails.

If you are using squash-and-merge pull requests, you can use git-sumi to lint the pull request title, which will be used as the merge commit message.

How do I enable shell completion?​

The --generate-shell-completion flag generates a shell completion script for the specified shell.

For example, to generate a completion script for bash:

git sumi --generate-shell-completion bash

This command will print the completion script to the console. You can save it to a file and source it in your shell's configuration file (e.g. ~/.bashrc).