【问题标题】:Preparing a git commit message before committing?在提交之前准备好 git 提交消息?
【发布时间】:2013-12-24 15:41:42
【问题描述】:

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

当然,我可以在提交期间放置这些消息,对我来说是有区别的。而且我可以看到 git 的论点也不是为了那个。我只是好奇。

我也知道我可以给我的分支起更有意义的名字,但我只是想要一些空间来实现这个目的。

【问题讨论】:

标签: git


【解决方案1】:

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

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

希望这对将来的其他人有所帮助!

【讨论】:

    【解决方案2】:

    您还可以通过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 完成的。

    【讨论】:

      【解决方案3】:

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

      结果是这个命令

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

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

      编辑 为该命令创建别名比预期的要复杂。 但是经过一些尝试和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】:

        如果你使用 VIM 作为 Git 的核心编辑器,那么当你运行 git commit 时,VIM 将被打开,你会看到一个包含 git status 命令的注释输出的缓冲区。

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

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

        【讨论】:

        • 值得注意的是,几乎所有$EDITOR都可以使用同样的方法。
        【解决方案5】:

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

        git commit -F message.txt
        

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

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

        done = commit -F message.txt
        

        这样您就可以简单地输入git done 让它始终使用您的文本文件。

        如果你犯了错误并且提交太快而没有更新消息文件,这不是问题,你可以做git commit --amend并修复提交中的消息。

        更新

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

        git commit -eF message.txt
        

        【讨论】:

        • 这看起来可能是我需要的。我接受你的回答。但是,如果有更多的方法来实现它,我个人愿意听到。
        • janos 是否可以根据分支创建note txt?例如,我希望能够“git checkout -b mynewbranch”然后这个命令创建分支加上“mynewbranch.commit”文本文件?我尝试使用别名但没有实现它。有什么解决办法吗?
        • @yaruncan 这真的是一个完全不同的问题......但无论如何,这个别名可能是你正在寻找的或足够接近的:newb = "!f() { git checkout -b $1 $2 && echo hello > $1.commit; }; f"
        • @yaruncan 我刚刚发现了一些新东西:-e 对于在执行提交之前编辑消息非常有用。我用这个额外的信息更新了我的答案。
        • 工作正常,但不会忽略以# 开头的行。
        【解决方案6】:

        如果对git commit 使用--file 选项,您可以使用破折号 (-) 而不是文件名,通过标准输入通过管道输入消息。

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

        【讨论】:

        • 谢谢,但这并不能解决问题,这只是提交信息的另一种方式,很高兴知道,但它无论如何都不是我的问题的解决方案,除非你能告诉我这是怎么做到的用来解决我的问题。
        • 嗯,通过管道传递的消息的重点是,所述消息的来源可以是任何程序。它可以从简单地打印文件的内容到让它们从任何可以想象的来源编译。
        • 当管道左侧包含多行时,这将产生不良影响。
        猜你喜欢
        • 2011-07-03
        • 2012-05-04
        • 2013-05-08
        • 2011-09-07
        • 1970-01-01
        • 2015-05-21
        • 2010-12-08
        • 2013-03-11
        相关资源
        最近更新 更多