如何自动执行 `git commit amend` 命令以在上一次提交消息的结尾添加内容?

16

尝试通过在上一个信息的结尾添加字符串来 编辑 上一次提交的信息。

正在从CI服务器上尝试执行此操作,因此我正在寻找一种自动化解决方案,不需要任何交互式人工干预。


CI服务器如何知道已提交错误的消息并需要提供新消息,而无需手动干预? - Anil
我正在使用一个带有特定标志的外部库,该标志仅提交消息而故意不进行推送。 我需要附加一个字符串以便与CI服务器集成,该服务器基于特定提交消息参数触发。 - Omer H
5个回答

25
如果您想修改当前提交并且不打开编辑器更改提交消息,可以使用-m选项指定消息。例如:
git commit --amend -m"This is the commit message."

将使用给定的消息作为新消息,修改当前的HEAD:

% git log
commit adecdcf09517fc4b709fc95ad4a83621a3381a45
Author: Edward Thomson <ethomson@edwardthomson.com>
Date:   Fri Mar 17 12:29:10 2017 +0000

    This is the commit message.

如果你想“追加”消息,你需要获取前一个消息:

OLD_MSG=$(git log --format=%B -n1)

然后您可以使用它来设置新消息,使用多个-m来设置多行:

git commit --amend -m"$OLD_MSG" -m"This is appended."

将给定的消息附加到原始消息末尾:

% git log
commit 5888ef05e73787f1f1d06e8f0f943199a76b70fd
Author: Edward Thomson <ethomson@edwardthomson.com>
Date:   Fri Mar 17 12:29:10 2017 +0000

    This is the commit message.

    This is appended.

1
太好了!谢谢。 - Omer H
你会如何为此设置别名?(追加到上一个提交信息) - Stuart
有没有不添加新行的想法? - jayqui
@jayqui 我不确定你具体在说哪些换行符。如果你只想从旧消息中删除所有换行符,那么可以使用任何命令行工具。xargs 不是为此而设计的,但可以。例如:OLD_MSG=$(git log --format=%B -n1 | xargs) - Edward Thomson

7
一种方法是使用GIT_EDITOR环境变量并修改提交内容。
GIT_EDITOR="echo 'appended line' >>" git commit --amend

其中appended line是您要插入的内容。

该变量将设置用于此提交操作的编辑器。基本上,Git将执行任何设置该变量的操作���传递一个包含提交消息的文件名,即$GIT_EDITOR <file>或者在这种情况下,echo 'appended line' >> <file>


3

这是我经常用来修正最后一次提交的命令

git commit --amend -C head

-C选项的意思是“使用现有的提交对象,重用日志信息和作者信息(包括时间戳)创建提交。”

如果您想进行其他更改,请使用-c

-c选项的意思是“与-C相似,但使用-c会调用编辑器,以便用户可以进一步编辑提交消息。”


对于交互使用,这比接受的答案更优越(但问题是关于自动化)。只需将head替换为HEAD - twil
HEAD在某些系统上可能是必需的,但在macOS上,head完全可以正常工作。 - Abizern

2

结合git loggit commit --amend

APPEND_MESSAGE="foo bar baz"
PREVIOUS_MESSAGE="$(git log --format=%B -n 1)"
git commit --amend -m "$PREVIOUS_MESSAGE" -m "$APPEND_MESSAGE"

1
在编程中,实现这一点的好方法是一行代码:
git commit --amend -m "$(git log --format=%B -n1)" -m "This is appended message"

其中最后一个路径(“这是追加的消息”)是附加消息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接