git 如何自动生成提交消息

uurity8g  于 2023-01-19  发布在  Git
关注(0)|答案(8)|浏览(143)

在一些(非常)罕见的情况下,我在仓库中做了一些无需解释的修改,以至于描述我的意图的提交消息有点无用。在这些情况下,我希望提交消息基本上只列出我添加/删除/编辑了哪些文件。例如:
添加了“狗. h”、“猫. h”
手动提交消息如下所示
添加了头文件
在这种情况下,最好不必实际编写提交消息,而是让它自动生成。
我知道这是一个非常糟糕的实践,但我只会将其用于私人项目的非专业存储库。我知道这很懒,但我很好奇如何做到这一点。Unix shell脚本是首选,但任何解决方案都是受欢迎的。

**问:**有没有办法自动生成一条git提交消息,列出哪些文件被修改了?

iyzzxitl

iyzzxitl1#

如果你真的那么懒,你可以使用下面的代码:简单地说,它执行一个git status,提取new filesdeletedrenamedmodified的行,并将其传递给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 <foo@bar.com>
Date:   Wed Jan 27 01:53:45 2016 +0000

renamed:    bar.txt -> bar2.txt
modified:   foo.txt
  • 已编辑:将原始的grep更改为sed,通过在Changes to be committedUntracked files之间添加行,使提交消息生成逻辑更通用,并生成外观稍好的提交消息)*
wlzqhblo

wlzqhblo2#

如果您不提供消息(使用-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>

现在只需从要插入的行(比如修改过的行)中删除#
我真的不鼓励你那样做,提交信息是非常重要的。
Related question,采用不同(可能更好)的方法。

wztqucjr

wztqucjr3#

您可以使用commit -m命令来传递任何消息作为提交消息。
另一个解决方案是使用模板配置选项定义默认模板。

一米一分一秒

存在**commit.template**配置变量。
commit.template
指定要用作新提交消息模板的文件。
“~/”扩展为$HOME值,“~user/”扩展为指定用户的主目录。

bfnvny8b

bfnvny8b4#

下面是@adrian-shum命令的一个变体,它使用git status --porcelain来增强健壮性,格式为copy-and-paste: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”意味着文件被重命名和修改。

643ylb08

643ylb085#

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

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

∮ ∮这是做什么
1.向您显示所做的更改,并提示您在提交时暂存这些更改(-p)
1.提交一条消息(-m),其中包含使用git status -s所做的更改以及自分支启动git log | grep commit | wc -l以来的更改数'
1.推动变革

运行示例如下

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 <tanveer.roowala@retracted.com>
Date:   Sat May 16 13:58:31 2020 +1000

     M README.md Edit# 184
dly7yett

dly7yett6#

在这种罕见的情况下,我喜欢使用标准的一个词的信息,如“平凡”。但其他可能是“无趣”或“addfiles”。重要的部分可能是它的一致性和可识别性。
但是我最近开始使用git leaders,比如“Add”和“Doc”,所以这些消息更有意义;例如,“增加:文件”。
如果您正在寻找一种有趣的方式,并且您的团队知道荒谬的消息意味着这是一个微不足道的提交,那么使用http://whatthecommit.com/来自动生成幽默的消息。

yuvru6vn

yuvru6vn7#

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

5tmbdcev

5tmbdcev8#

根据阿德里安沈的回答,我写了一个小脚本。脚本链接仅供参考-〉https://codeberg.org/fftcc/gencommit/自动生成提交消息,也许它会对某人有用,脚本是设计来管理多个仓库(但它可以与一个),也可以全局工作,如果放在/usr/bin/。该项目仍然是原始的,但我希望您的支持!
文件生成提交:

#!/usr/bin/env bash

if [[ -z $1 ]]; then
        target_dir=$HOME
else
        target_dir=$1
fi

repo=($(find $target_dir -name  .gencommitrc | sed -e s'/.gencommitrc//g'))

commit() {
    git add .
    LANG=C git -c color.status=false status \
    | sed -n -r -e '/use/ d' \
                -e '1,/Changes to be committed:/ d' \
                -e '1,1 d' \
                -e '/^Untracked files:/,$ d' \
                -e 's/^\s*//' \
                -e '/./p' \
    | git commit -F -
}

pull() {
    git pull
}

push() {
    git push
}

for res in ${repo[@]}; do
        cd $res
        . .gencommitrc
done

文件. gencommittrc

# Example .gencommitrc file
#pull
commit
#push

生成提交

根据git状态自动生成提交。

它的用途和工作原理

如果需要在一个或多个仓库中同时自动创建提交,并且不需要提交消息有意义。
gencommit查找所需的仓库,将所有文件添加到索引中,并根据git status中的信息将更改提交到仓库。

入门

gencommit是为在您的系统上全局使用而创建的,建议将gencommit文件放在/usr/bin/目录或您的操作系统的类似目录中,然后重新启动您的终端会话。在此之前,还需要授予执行权限:

chmod +x gencommit

基本用法

您需要在每个目标资料档案库中创建一个名为.gencommitrc的配置文件。此文件不能为空,必须至少包含一个commit选项。这是正确操作所必需的。

# Example .gencommitrc
commit

接下来,您需要以用户身份在终端中运行应用程序gencommit
示例:

gencommit

参数

gencommit有一个参数--它将查找存储库的路径。默认情况下,这是用户的主目录~/
示例:

gencommit ~/other/dir/

选项.生成提交

!!!请务必遵循参数的写入顺序(与手动执行以下命令的方式相同:git pull-〉git add-〉git commit-〉git push),首先是pullcommit,然后是push。"pull"和"push"选项是可选的。commit选项是必需的
commit-创建自动生成的提交
pull-运行git pull命令
push-运行git push命令

# Example .gencommitrc
pull
commit
push

相关问题