当我挤压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