如何自动生成提交消息

问题描述 投票:0回答:8

在某些(非常)罕见的情况下,我在存储库中进行了一些不言自明的更改,以至于描述我意图的提交消息有些无用。在这些情况下,我希望提交消息基本上只列出我添加/删除/编辑的文件。例如:

添加了“dog.h”、“cat.h”

手动提交消息看起来像这样

添加头文件

在这种情况下,最好不必实际编写提交消息,而是自动生成它。

我知道这是非常糟糕的做法,但我只会将其用于用于私人项目的非专业存储库。我知道这很懒,但我很好奇如何做到这一点。首选 Unix shell 脚本,但欢迎任何解决方案。

问: 有没有办法自动生成 git 提交消息,列出哪些文件已更改?

git commit
8个回答
13
投票

如果你真的那么懒,你可以使用以下方法。 简而言之,它执行

git status
,提取
new files
deleted
renamed
modified
的行,并将其传递给
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 -

调整

sed
部分以自定义如何根据
git status

的结果生成消息

将其别名为简短的名称,或将其另存为脚本(例如

git-qcommit
),以便您可以将其用作
git qcommit

来自

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

编辑: 将原来的

grep
更改为
sed
,通过在
Changes to be committed
Untracked files
之间添加行,使提交消息生成逻辑更加通用,并生成看起来稍微更好看的提交消息)


6
投票

如果您不提供消息(使用

-m
标志),将打开一条自动生成的消息并要求您修改它(如果您提供)。看起来像:

# 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>

现在您只需从要插入的行(例如修改后的行)中删除

#
即可。

我真的不鼓励你这样做,提交消息非常重要。

相关问题采用不同(也许更好)的方法。


5
投票

这里是 @adrian-shum 命令的一个变体,它使用

git status --porcelain
来变得更加健壮,格式为复制粘贴:able git 别名如下:

Git 别名在此要点中维护:
https://gist.github.com/erikw/654386d35ecfdb0354cd2b71763f19ae

这将产生带有消息的提交(最后一行),例如:

$ git status --porcelain
A file1.py
A file2.py
A file3.py
M file4.py
M file5.py
D README.md
R test.txt-> test2.txt
$ git commit-status
$ git log --no-decorate -n 1
bee4f8e Added: file1.py file2.py file3.py Modified: file4.py file5.py Deleted: README.md Renamed: test.txt-> test2.txt

为什么要进行如此复杂的替换?因为修饰符可以分组,例如“RM a -> b”意味着文件被重命名和修改。


4
投票

您可以使用

commit -m
命令传递任何消息作为提交消息。


另一种解决方案是使用模板配置选项来定义默认模板。

commit.template

commit.template
配置变量。

commit.template

指定一个文件用作新提交消息的模板。
“~/”扩展为 $HOME 的值,“~user/”扩展为指定用户的主目录。


0
投票

在这种罕见的情况下,我喜欢使用标准的单词消息,比如“琐碎的”。 但其他的可能是“无趣”或“addfiles”。 重要的部分可能是它的一致性和可识别性。

但我最近开始使用 git Leaders,例如“Add”和“Doc”。 那么这些信息就更有意义了;例如,“添加:文件”。

如果您正在寻找一种有趣的方式,并且您的团队知道可笑的消息意味着这是一个微不足道的提交,请使用 http://whatthecommit.com/ 自动生成幽默的消息。


0
投票

希望这有帮助,您可以在 .bashrc 中的 ls 别名部分下配置别名,如下所示

alias gitit="git commit -pm '`git status -s` Edit# `git log | grep commit | wc -l`'; git push"

它的作用是

  1. 向您显示您所做的更改,并提示您是否将它们暂存在提交中 (-p)
  2. 提交一条消息 (-m),其中包含使用
    git status -s
    所做的更改以及自分支开始以来的更改数量
    git log | grep commit | wc -l
    '
  3. 推动变革

下面运行示例

tr@tr-work:~/Gits/devops-ansible-roles$ gitit

diff --git a/README.md b/README.md
index 0ba82f15..dd8be086 100755
--- a/README.md
+++ b/README.md
@@ -3,4 +3,7 @@
 ==============================================================

 This repository is a collection of Ansible Roles and associated artifacts for executing those roles such as scripts, templates and variable files.
-These roles are called by Jenkins Pipelines defined in the devops-jenkins-pipelines repo.
\ No newline at end of file
+These roles are called by Jenkins Pipelines defined in the devops-jenkins-pipelines repo.
+
+
+//
(1/1) Stage this hunk [y,n,q,a,d,e,?]? y

[feature/DO-389_manage_dbs c6dfacf8]  M README.md Edit# 184
 1 file changed, 4 insertions(+), 1 deletion(-)
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 8 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 314 bytes | 314.00 KiB/s, done.
Total 3 (delta 2), reused 0 (delta 0)
remote: 
remote: Create pull request for feature/DO-389_manage_dbs:
remote:   https://bitbucket.org/retracted/devops-ansible-roles/pull-requests/new?source=feature/DO-389_manage_dbs&t=1
remote: 
To bitbucket.org:retracted/devops-ansible-roles
   4e14490e..c6dfacf8  feature/DO-389_manage_dbs -> feature/DO-389_manage_dbs
tr@tr-work:~/Gits/devops-ansible-roles$ git log
commit c6dfacf825e6c325bb579de29305d82a7b6bd07d (HEAD -> feature/DO-389_manage_dbs, origin/feature/DO-389_manage_dbs)
Author: Tanveer Roowala <[email protected]>
Date:   Sat May 16 13:58:31 2020 +1000

     M README.md Edit# 184


0
投票

我所做的是保存文件,同时保持编辑器窗口打开,然后并行使用 sed 脚本进行编辑。例如,您可以使用 sed -n '/new/ s/#//gp' commit_file ,当您满意时,切换到 sed -i ,字符串上仅以 //g 结尾。然后重新读取文件,如果您使用的是 nano,请按 CTRL+R commit_file,如果您想进行一些手动编辑并退出


0
投票

每次进行 git 提交时,我都不知道要写什么。但知道有人工智能,有人开发了这个:autocommit.top

© www.soinside.com 2019 - 2024. All rights reserved.