当我挤压N-commit时,Git提交模板不显示

当我挤压N-commit时,Git提交模板不显示,git,squash,Git,Squash,我在配置文件中有模板文件的安装路径,当我执行基本提交(git add-A.&git commit)时,它可以正常工作: 相反,当我尝试挤压N个提交并添加它们的消息时,我的提交模板不会显示 =>在压缩最后N次提交期间,是否有任何方法添加git模板消息 在这个答案的帮助下,我挤压最后2个承诺的方式: 如果要开始编辑带有 现有提交消息的串联: git commit--edit-m“$(git日志--格式=%B--反向头..HEAD@{1})” 作为替代方案,当我执行以下操作时,我会得到相同的结果:

我在配置文件中有模板文件的安装路径,当我执行基本提交(
git add-A.&git commit
)时,它可以正常工作:


相反,当我尝试挤压N个提交并添加它们的消息时,我的提交模板不会显示

=>在压缩最后N次提交期间,是否有任何方法添加git模板消息


在这个答案的帮助下,我挤压最后2个承诺的方式:

如果要开始编辑带有 现有提交消息的串联:
git commit--edit-m“$(git日志--格式=%B--反向头..HEAD@{1})”

作为替代方案,当我执行以下操作时,我会得到相同的结果:


git reset--hard HEAD~2&&git merge--squash HEAD@{1}&&git commit
示例命令中的
-m
参数覆盖模板

您可能需要编写一个小脚本,用于:

  • 阅读你的模板
  • 运行所需的
    git log
    命令
  • 在某个定义的模板位置插入
    git日志
    输出(可能在模板中使用您自己发明的语法)
  • 将结果文件作为临时文件写入某处
  • 调用
    git commit--edit-F/path/to/temporary/file
    ,而不是
    git commit--edit-m…
  • git commit
    本身返回时删除临时文件
  • 退出时,退出状态为
    git commit
    命令

但是,请注意,
gitmerge--squash
遵循
merge.log
配置旋钮,该旋钮可能接近您想要的。您可以运行git-cmerge.log=20 merge--squash…。缺点是这是
%s
格式,而不是
%B
格式:您只获得主题行。

我正在寻找以下内容,其中我需要使用
$(cat.git\u commit\u template.txt)打印模板消息。

更新代码:

git reset --soft HEAD~2
git commit --edit -m"$(git log --format=%B --reverse HEAD..HEAD@{1}) $(cat .git_commit_template.txt)"
git push -f

我认为您正在预填充消息以编辑模板的位置?您没有看到模板,因为您指定希望从
git log--format=%B--reverse HEAD..HEAD@{1}
获得输出。即使我执行
git commit
模板也不会显示@mattwou说“当我执行基本提交时,它工作得很好”。在重置之前和之后进行提交没有区别。它仍然是“基本提交”(不管这意味着什么)。如果我这样做,我很抱歉:
git reset--hard HEAD~2&&git merge--squash HEAD@{1}&&git commit
以便在此过程中编辑到以前的git commit消息。@我是否获得git commit部分的主题行?@t请将其检索出来并查看。我执行了
git-c merge.log=20 merge--squash HEAD@{1}
但仍然具有相同的输出模板是纯文本文件。除了您放入的纯文本之外,它没有任何内容。您必须选择:您想要一个没有日志的纯文本文件,还是想要一个日志?您不能两者都有。我还向您展示了一种方法,通过该方法,您可以编写一个组合您选择的模板的程序(以您选择的格式)使用
git log
输出生成一个新的纯文本文件,您可以将其用作一次性模板。您必须自己编写此程序。这是一个很好的简单程序。:-)它只会在模板之后(或之前)粘贴模板日志消息,取决于你把它放在哪里。它仍然是一个程序:一点shell脚本。这就是为什么人们应该学习shell脚本。
#!/bin/bash

git reset --soft HEAD~2
git commit --edit -m"$(git log --format=%B --reverse HEAD..HEAD@{1})" # template message does not show up
git reset --soft HEAD~2
git commit --edit -m"$(git log --format=%B --reverse HEAD..HEAD@{1}) $(cat .git_commit_template.txt)"
git push -f