首页 > 解决方案 > 我如何 git commit --no-edit 但同时获取上次提交的作者姓名/电子邮件?

问题描述

我们的 CI 构建执行 git merge --squash $BRANCH 到 master 然后执行 git commit --no-edit 如果构建通过,它会推送 master(我们的 CI 是唯一可以推送到 master 的人)。

但是,目前我们的 git 日志看起来像这样

在此处输入图像描述

我更愿意将消息设置为分支名称+所有压缩提交(添加 -m 清除所有压缩提交:(),将用户设置为最后一次提交用户名并将电子邮件设置为最后一次提交电子邮件。这可能吗?

标签: git

解决方案


您可以在执行 squash 时通过将GIT_COMMITTER_NAMEGIT_COMMITTER_EMAIL环境变量设置为适当的值来设置提交者名称和电子邮件。这将覆盖默认值并允许您自定义它。

至于修改消息,您并不真正想要--no-edit,因为您确实想要编辑它,但您也不想要-m,因为这会覆盖整个消息。您真正想要的是一个脚本,它可以编辑您的提交消息以用作编辑器。

您确实可以使用 指定这样的脚本GIT_EDITOR,并且它应该采用单个参数作为要编辑的文件的名称,它应该在原地编辑它(或用您的副本覆盖文件),它应该退出 0。如果你重新使用标准的 Unix 环境,一个调用程序的 shell 脚本,如exed可能是一个不错的选择。您还可以使用sed写入临时文件,然后mv覆盖原始文件。

所以你的调用最终看起来像这样:

GIT_COMMITTER_NAME="$(git log -1 --format=%an "$BRANCH")" \
  GIT_COMMITTER_EMAIL="$(git log -1 --format=%ae "$BRANCH")" \
  GIT_EDITOR="script/to/merge-editor" \
  git merge --squash "$BRANCH"

推荐阅读