git - 我如何 git commit --no-edit 但同时获取上次提交的作者姓名/电子邮件?
问题描述
我们的 CI 构建执行 git merge --squash $BRANCH 到 master 然后执行 git commit --no-edit 如果构建通过,它会推送 master(我们的 CI 是唯一可以推送到 master 的人)。
但是,目前我们的 git 日志看起来像这样
我更愿意将消息设置为分支名称+所有压缩提交(添加 -m 清除所有压缩提交:(),将用户设置为最后一次提交用户名并将电子邮件设置为最后一次提交电子邮件。这可能吗?
解决方案
您可以在执行 squash 时通过将GIT_COMMITTER_NAME
和GIT_COMMITTER_EMAIL
环境变量设置为适当的值来设置提交者名称和电子邮件。这将覆盖默认值并允许您自定义它。
至于修改消息,您并不真正想要--no-edit
,因为您确实想要编辑它,但您也不想要-m
,因为这会覆盖整个消息。您真正想要的是一个脚本,它可以编辑您的提交消息以用作编辑器。
您确实可以使用 指定这样的脚本GIT_EDITOR
,并且它应该采用单个参数作为要编辑的文件的名称,它应该在原地编辑它(或用您的副本覆盖文件),它应该退出 0。如果你重新使用标准的 Unix 环境,一个调用程序的 shell 脚本,如ex
或ed
可能是一个不错的选择。您还可以使用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"
推荐阅读
- jquery - 使用 jQuery 动态添加/删除行
- c# - 无法在nuget包中安装
- velo - 4 用于过滤转发器的复选框组
- mysql - 将 MySQL 查询转换为 SQL Server
- bash - 打开终端时“没有这样的文件或目录”
- android - 是否可以在 Android 上的 React-native 中以编程方式隐藏键盘上方的工具栏?
- javascript - 使用 ReactJS 向 Rails 后端提交表单
- python - 为什么我的包占用这么多内存
- azure - 我们可以自动缩放连接到应用程序网关的 Azure 容器实例吗
- google-bigquery - Spotfire - Biquery - Simba JDBC