在提交之前准备git提交消息传递?

时间:2013-12-07 06:07:35

标签: git

是否可以在提交之前准备提交消息,这意味着我将在实际提交之前或工作目录期间键入我的提交消息,以便我知道我正在处理什么,并且我知道这个分支或提交是什么将是一切。当我说“之前”时,我并不意味着在我进入命令行提交之前的几秒钟。我的意思是在提交之后或在分支的开始之后,以便下一次提交将自动继承队列中的消息或可能被调用的消息。

当然,我可以在提交过程中提出这些消息,对我来说存在差异。我可以看出,井git的论点也不适用于此。我只是好奇。

我也知道我可以给我的分支更有意义的名字,但我只是想为此目的留出一点空间。

6 个答案:

答案 0 :(得分:60)

Git可以使用-F--file标记从文件中获取提交消息:

git commit -F message.txt

您可以提前在文本文件中准备邮件,并在提交时使用该文件。

如果经常这样做,为它创建一个别名是有意义的,例如:

done = commit -F message.txt

这样您只需输入git done即可让它始终使用您的文本文件。

如果您在没有更新消息文件的情况下犯了错误并且提交速度太快而不是问题,那么您可以执行git commit --amend并在提交中修复消息。

<强>更新

-e标志也很有用,因为它允许您在提交之前编辑消息:

git commit -eF message.txt

答案 1 :(得分:17)

如果对--file使用git commit选项,则可以使用短划线(-)而不是文件名通过标准输入来输入消息。

echo "Classy commit message" | git commit --file -

答案 2 :(得分:1)

如果您使用VIM作为Git的核心编辑器,那么当您运行git commit时,将打开VIM并向您显示一个缓冲区,其中包含git status的注释输出命令。

然后,您可以使用VIM命令:read COMMIT_MSG.txt,它将在当前光标位置插入文件COMMIT_MSG.txt(您的预先准备的提交消息)的内容。

这实际上只是运行git commit -eF COMMIT_MSG.txt的替代方法,但我个人觉得更容易记住VIM命令:read,而不是必须记住另一个git命令行参数。个人喜好,真的。

答案 3 :(得分:0)

我将LopSaejanos的答案结合起来,使用来自this post的命令从输入文本文件中自动删除以#开头的所有行。

结果是这个命令

cat .git/COMMIT_EDITMSG | sed '/^#/ d' | git commit -F -

为了缩短它,我建议添加一个别名。

修改 为此命令创建别名比exspeced更复杂。 但经过一些尝试和withs this tuturial后,我创建了一个有效的别名,并支持自定义参数。

[alias]
  commitmsg  = "!f() { myarg=${@}; cat .git/COMMIT_EDITMSG | sed '/^#/ d' | git commit -F - $myarg;  }; f"

您可以使用它,例如带有像这样的修改日期的参数

commitmsg --date "2001-01-02 18:00:00"

答案 4 :(得分:0)

您还可以通过using this command获取git的vim格式(不包括通常列出包含/排除的更改的注释行):

vi -c 'set syntax=gitcommit'

我做了一个别名(非git)并将其添加到我的〜/ .bashrc中。

alias ecm="vi -c 'set syntax=gitcommit'"

重新获取您的.bashrc,以在当前会话中将其打开。

source ~/.bashrc

然后使用它。

ecm message.txt

所有这些操作都是通过Windows上的Git Bash完成的。

答案 5 :(得分:0)

您可以将模板文件添加到项目的 git 配置中,每次开始新提交时都会使用其内容。这个文件可能会被添加到 .gitignore 中,这样它的存在将只与你在开发时相关。例如,站在项目的根目录中,您可以执行以下操作:

touch .gitmessage
echo "\n# commit message\n.gitmessage" >> .gitignore
git config commit.template .gitmessage

希望这能在未来对其他人有所帮助!