How to automatically generate commit message

If you are really that lazy you may just use the following. In brief, it does a git status, extract lines for new files, deleted, renamed and modified, and pass it to git commit

# LANG=C.UTF-8 or any UTF-8 English locale supported by your OS may be used
LANG=C git -c color.status=false status \
| sed -n -r -e '1,/Changes to be committed:/ d' \
            -e '1,1 d' \
            -e '/^Untracked files:/,$ d' \
            -e 's/^\s*//' \
            -e '/./p' \
| git commit -F -

Tweak the sed part to customize how you want the message to be generated base on result of git status

Alias it to something short, or save it as a script (e.g. git-qcommit) so that you can use it as git qcommit

A sample message from git log

adrianshum:~/workspace/foo-git (master) $ git log
commit 78dfe945e8ad6421b4be74cbb8a00deb21477437
Author: adrianshum <[email protected]>
Date:   Wed Jan 27 01:53:45 2016 +0000

renamed:    bar.txt -> bar2.txt
modified:   foo.txt

Edited: Changed original grep to sed to make the commit message generation logic more generic by including lines between Changes to be committed and Untracked files, and produce a slightly better looking commit message)


You can use the commit -m command to pass any message as your commit message.


Another solution is to use the template configuration option to define default template.

commit.template

There is commit.template configuration variable.

commit.template

Specify a file to use as the template for new commit messages.
"~/" is expanded to the value of $HOME and "~user/" to the specified user’s home directory.


If you don't provide a message (using the -m flag), an auto-generated message will be opened and asks you to modify it (if you with). It looks like:

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch <branch>
# Changes to be committed:
#       deleted:    <deleted files>
#       modified:   <modified files>
#
# Untracked files:
#       <untracked files>

Now you just have to remove the # from the lines you want to insert (say the modified ones).

I really discourage you from doing that, commit messages are very important.

Related question with different (maybe better) approach.

Tags:

Git

Commit