Git's interpret-trailers command is capable of testing for and manipulating arbitrary Key: Value tags in commit messages.
For example, appending Reviewed-by: MY NAME <email@example.com> to the top commit message is as simple as running:
> GIT_EDITOR='git interpret-trailers --trailer \ "Reviewed-by: $(git config user.name) <$(git config user.email)>" \ --in-place' git commit --amend
Or with the help of a "git rb" alias, via:
> git config alias.rb "interpret-trailers --trailer \ \"Reviewed-by: $(git config user.name) <$(git config user.email)>\" \ --in-place"
> GIT_EDITOR="git rb" git commit --amend
The above examples work by replacing the normal git commit editor with a call to git interpret-trailers, which appends the desired tag to the commit message and then exits.
My specific use case is to add Reviewed-by: tags to specific commits during interactive rebase, e.g.:
> git rebase --interactive HEAD~3
This brings up an editor with a list of the top three commits in the current branch. Assuming the aforementioned rb alias has been configured, individual commits will be given a Reviewed-by tag when appended with the following line:
exec GIT_EDITOR="git rb" git commit --amend
As an example, the following will see three commits applied, with the commit message for two of them (d9e994e and 5f8c115) appended with my Reviewed-by tag.
pick d9e994e ctdb: Fix CID 1398179 Argument cannot be negative exec GIT_EDITOR="git rb" git commit --amend pick 0fb313c ctdb: Fix CID 1398178 Argument cannot be negative # ^^^^^^^ don't add a Reviewed-by tag for this one just yet pick 5f8c115 ctdb: Fix CID 1398175 Dereference after null check exec GIT_EDITOR="git rb" git commit --amend
Bonus: By default, the vim editor includes git rebase --interactive syntax highlighting and key-bindings - if you press K while hovering over a commit hash (e.g. d9e994e from above), vim will call git show <commit-hash>, making reviewing and tagging even faster!
- Upstream Git developers, especially those who implemented the interpret-trailers functionality.
- My employer, SUSE.