Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to automatically generate commit message

Tags:

In some (very) rare occasions, I make some changes in my repository that are so self-explanatory that a commit message describing my intentions is somewhat useless. In these cases, I would like the commit message to basically just list what files I've added/removed/edited. For instance:

Added 'dog.h', 'cat.h'

A manual commit message would look like

Added header files

In situations like this it would be nice to not have to actually write the commit message, but rather have it automatically generated.

I'm aware that this is very bad practice, but I would only use this for non-professional repositories used for private projects. I know it's lazy, but I'm curious as to how it can be done. Unix shell scripts are preferred, but any solution is welcome.

Q: Is there a way to automatically generate a git commit message, listing what files that has been changed?

like image 988
birgersp Avatar asked Jan 26 '16 09:01

birgersp


People also ask

Does git automatically create commits?

git-auto-commit-action will automatically add, commit and push any created or changed files back to your repo automatically.

How do you supply a commit message?

The easiest way to create a Git commit with a message is to execute “git commit” with the “-m” option followed by your commit message.


2 Answers

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)

like image 148
Adrian Shum Avatar answered Oct 21 '22 07:10

Adrian Shum


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.

like image 31
Maroun Avatar answered Oct 21 '22 06:10

Maroun