After a Git rebase, it fixes commit messages which contain outdated references to other commits.
Imagine that we’re doing a refactor to get our app ready to support many languages. We start doing our work on a feature branch.
In our first two commits, we do all the refactoring for the classes related to invoices. It’s a complicated refactor. We use our commit messages to explain ourselves in detail. Our feature branch looks like this, oldest first:
01b7d68 Extract invoice view strings to locale file
We do it like this because (long explanation of approach and tricky
things about it)
7dc3e8f Pass invoice-related strings to the MagicAuth gem
We have to do this because (long explanation of approach and tricky
things about it)
Now we go on to refactor the rest of the app, following the same approach as the first two commits.
We don’t want to repeat all that long explanation again, so in our commit messages we just refer to the commits where we introduced the approach. So the rest of our feature branch looks like this:
fa0404c Extract supplier view strings to locales file
This follows the same approach as 01b7d68.
3b29442 Pass supplier-related strings to the MagicAuth gem
This follows the same approach as 7dc3e8f.
…and so on, for other parts of the app.
Somebody has introduced some changes into the upstream branch origin/master
.
We want to pull these changes into our feature branch. So we do git rebase origin/master
. After the rebase is finished, our branch looks like this:
3e870d4 Extract invoice view strings to locale file
We do it like this because (long explanation of approach and tricky
things about it)
7b33c97 Pass invoice-related strings to the MagicAuth gem
We have to do this because (long explanation of approach and tricky
things about it)
63c2d81 Extract supplier view strings to locales file
This follows the same approach as 01b7d68.
fbfe0ed Pass supplier-related strings to the MagicAuth gem
This follows the same approach as 7dc3e8f.
…and so on.
Now we have a problem - the commit messages for 63c2d81
and fbfe0ed
refer
to commits that no longer exist on our branch.
With git-update-messages
installed, when the rebase finishes you‘ll see a message:
update-messages: Updated commit messages.
…and it will have automatically fixed your commit messages:
3e870d4 Extract invoice view strings to locale file
We do it like this because (long explanation of approach and tricky
things about it)
7b33c97 Pass invoice-related strings to the MagicAuth gem
We have to do this because (long explanation of approach and tricky
things about it)
63c2d81 Extract supplier view strings to locales file
This follows the same approach as 3e870d4.
fbfe0ed Pass supplier-related strings to the MagicAuth gem
This follows the same approach as 7b33c97.
…and so on.
- Ruby - the installation steps assume that you are using rbenv to manage your Ruby installation
- Clone the repository and
cd
into it. - Run
rbenv install && bundle install
.- If you get an error when installing the Rugged gem, you may need to install
cmake
(brew install cmake
on a Mac).
- If you get an error when installing the Rugged gem, you may need to install
- Copy
bin/rbenv/hooks/post-rewrite
to your Git hooks path.- This might be
.git/hooks
in a specific repository, or a path that you've configured globally ascore.hooksPath
. It depends on how you like to use Git.
- This might be
- Edit the file that you just created, setting
TOOL_PATH
to the path of this repository on your computer.
- It will only modify abbreviated commit SHAs that are at least 7 characters long.
- installation experience
- package as a gem?
- Rake task to generate a repo to test the installation