Updated git rebase --interactive --autosquash commit preparation
Previously I wrote about git rebase --interactive --autosquash
,
and showed a couple of helper aliases to aid in creating the specially
formatted commit messages used by --autosquash
.
In 1.7.4, Git gained built-in versions of these helpers (specifically
in d71b8ba and 89ac122). It is now
possible to use the commit command directly (or much more simple
aliases) to create fixup
and squash
commits for use with
--autosquash
.
The built-in way to create a squash commit now looks like this:
Creating a squash commit using the
--squash flag
% vim Foo.txt
% git commit -am 'Change all the "Bar"s to "Foo"s'
[topic-branch 2710f7c] Change all the "Bar"s to "Foo"s
1 file changed, 2 insertions(+), 2 deletions(-)
% vim Bar.txt
% git commit -am 'Change all the "Foo"s to "Bar"s'
[topic-branch 27862f1] Change all the "Foo"s to "Bar"s
1 file changed, 2 insertions(+), 2 deletions(-)
% vim Foo.txt
% git commit -a --squash HEAD~2
Waiting for Emacs...
[topic-branch 297de07] squash! Initial commit
1 file changed, 2 insertions(+), 2 deletions(-)
Creating a fixup
commit works just the same (substituting --squash
with --fixup
in the commit command), though Git won't automatically
pop open the editor to ask for additional information in the commit
message (as this would be discarded by the interactive rebase). When
using --squash
the commit message options can also be used (Ex:
-m
, -c
, -C
, and -F
).
Finally, here are the updated aliases for fixup
, and squash
made
much more simple by these new flags to commit
:
Updated ~/.gitconfig aliases
[alias]
fixup = !sh -c 'git commit --fixup=$1' -
squash = !sh -c 'git commit --squash=$1' -
ri = rebase --interactive --autosquash
Update (2012-10-25): Fix aliases to have same usage pattern as previous ones.