Music Metrics Vault

Commit-editmsg ⇒

git commit -m "Fix bug in login flow" The -m flag is convenient for short messages, but it completely bypasses the COMMIT-EDITMSG workflow. This means you also bypass the powerful features that come with it: templates, hook validation, and multi-line editing. To truly appreciate the file, let's walk through a manual commit. Imagine you have staged changes. You run git commit . Your editor opens, and you see something like this:

Now, if a developer tries to commit with a bad message, Git aborts. This doesn't just work for command-line commits; it works for GUI tools and IDEs because everything eventually writes to COMMIT-EDITMSG . Your project uses Jira (PROJ-123). You want every commit to include the ticket number, but you hate typing it. 30 seconds before you commit, you fetched the PROJ-123 branch. COMMIT-EDITMSG

if ! grep -q -E "$pattern" "$message_file"; then echo "ERROR: Commit message does not follow Conventional Commits format." echo "Expected: <type>(<scope>): <subject>" echo "Example: feat(auth): add OAuth2 provider" exit 1 fi git commit -m "Fix bug in login flow"

#!/bin/sh # .git/hooks/commit-msg message_file=$1 # This is the path to COMMIT-EDITMSG pattern="^(feat|fix|docs|style|refactor|test|chore)((.+))?: .+" Imagine you have staged changes

In the world of Git, much of the spotlight falls on commands like commit , push , merge , and rebase . Developers boast about their aliases, their branching strategies, and their elegant use of interactive rebasing. Yet, nestled quietly in the .git folder of every repository lies a humble, often-overlooked file: COMMIT-EDITMSG .

If you have ever typed git commit without the -m flag, you have interacted with this file. You might have thought you were just using a text editor to write a message. In reality, you were editing a temporary file named COMMIT-EDITMSG .

#!/bin/sh # .git/hooks/prepare-commit-msg commit_msg_file=$1 branch_name=$(git symbolic-ref --short HEAD) if echo "$branch_name" | grep -qE '[A-Z]+-[0-9]+'; then ticket=$(echo "$branch_name" | grep -oE '[A-Z]+-[0-9]+') echo "[$ticket] $(cat $commit_msg_file)" > $commit_msg_file fi