Many software companies use the convention of adding JIRA ticket numbers to all commits.
Adding a JIRA number to new commits is easy with this guide: https://tjdane.medium.com/automatically-add-jira-number-to-commit-messages-db299e3a83d8
The problem
What if you have MANY old commits that are missing JIRA numbers?
The solution
We can do this using git filter branch and sed. Steps below:
- Find the oldest commit hash on your branch, for example aabb11
- Get a JIRA ticket number that you want to add to commits that don’t already have one. For example, JIRA-1234
- On feature branch, run the command below. Replace `JIRA-1234` with your own JIRA ticket placeholder, and `aabb11` with the oldest commit you want to fix
The code
git filter-branch -f --msg-filter "sed -E '/^[0-9A-Z]+-[0-9]+/! s/^/JIRA-1234 /'" aabb11..HEAD
Explanation
- git filter-branch will loop over a range of commits
- We pass it the oldest (aabb11) and the latest (HEAD)
- For each commit message, it executes a command line string we pass
- Our command uses sed to edit the commit message
- Sed takes a regex that checks for JIRA numbers. The regex is /^[0–9A-Z]+-[0–9]+/ https://regex101.com/r/HKfi61/1/
- We look for matches NOT containing JIRA numbers using the ! character
- Then we call sed where the first section ^ is the start of the commit message
- And the value to add is JIRA-1234
- So all togher, our final result is adding the JIRA ticket to the start of the commit message!