【问题标题】:set commit message for future git commit为将来的 git commit 设置提交消息
【发布时间】:2019-02-18 06:15:07
【问题描述】:

有没有办法使用 git 为下一次提交设置评论?想象一下这样的事情:

git next-commit "Implement client-side validation"

# implement the feature ...

# commit changes
# equivalent to git commit -m "Implement client-side validation"
git commit -m from-next-commit

这背后的动机是我在编程时经常想到一个特定的功能,但在此过程中我最终开发了一些其他功能或修复了相关的东西,我忘记了我正在处理的主要任务.

那时我已经对源代码进行了有用的更改,但我什至不记得我添加的主要功能是什么,因为这只是一堆更改,我能想到的唯一提交消息是 @ 987654323@。为下一次提交设置消息也可以帮助我继续做我应该做的事情。在任何时候,如果我觉得我忘记了主要任务并偏离了其他功能,我最好用git next-commit 之类的东西问git,它可以打印Implement client-side validation

有这样的功能吗?

编辑:看到一些答案后,我想我应该澄清另一件事。理想情况下,此命令还可以帮助您跟踪何时使用了未来的提交。例如,如果您使用 git commit -m from next-commit 两次而之前没有设置新的未来提交消息,它应该会失败。

$ git next-commit "Implement client-side validation"
ok
$ git commit -m from-next-commit
ok
# git commit -m from-next-commit
error : already used
$ git next-commit "Optimize get_request"
ok
$ git commit -m from-next-commit
ok

【问题讨论】:

标签: git


【解决方案1】:

就我个人而言,我会按照Tim Biegeleisen 的建议去做,但如果您愿意使用自定义命令而不是git commit,那么做您想做的事情并不会太难。

也就是说,您可以制作一个自定义的git-next-commit 脚本,将其放入PATH,然后让它将您想要的提交消息写入您的git repo 根目录中的某个文件(或者可能在.git/)。

然后制作另一个自定义脚本(例如git-commit-from-next,或者只是重用git-next-commit,可能带有命令行选项),使用先前存储的消息调用git commit并删除文件。如果文件不存在,则打印相应的错误消息。

如果看到特殊的“from-next-commit”消息,您也可以让 git prepare-commit-msg hook 做您想做的事情。

【讨论】:

  • James,应该可以设置一个预提交挂钩,从某个文件中读取提交消息。然后,您只需要一些将消息写入该文件的命令行程序。缺点:那么您可能会失去在实际提交时轻松选择消息的能力。
  • @TimBiegeleisen 我的想法是使用 prepare-commit-msg 钩子(不是 pre-commit 钩子)来检查一些特殊的“from-next-commit”消息,替换提交的内容如果找到消息,否则不要理会所有内容。再看一下 prepare-commit-msg 钩子,我认为应该可以(但我还没有花时间实际实现它)。
【解决方案2】:

也许使用git commit -F <file> 从文件中读取评论?

【讨论】:

  • 我偶尔会这样做。在处理长功能时它很有用。我将消息放在 .commit 文件中,并在工作期间编辑消息。在这两者之间,我使用以“...”开头的消息进行小提交。最后,使用 .commit 文件进行最终提交。
  • 也许是 -e 标志。 git commit -eF <file> 允许您在最终提交中编辑消息
【解决方案3】:

老实说,如果你很难记住你在当前提交中做了什么,我可能会质疑你是否会在提交之前审查所有代码。也许你应该投资像 Jira 这样的问题跟踪器。

话虽如此,您可能会发现这里有用的一个技巧是从进行虚拟提交开始,您只需在某处进行一些小改动。通过以下方式添加您想到的“未来”提交消息:

git commit -m 'Implement client-side validation'

然后,做你的工作并完成提交。当需要提交这项工作时,您可以修改之前的提交:

git commit --amend

默认情况下,这应该会打开一个编辑器窗口,您应该在其中看到您未来的提交消息已经存在。

【讨论】:

  • 确实如此,如果记不住事情,最好在某处添加注释以跟踪您正在做和已经完成的事情。
  • 我认为这就是答案的重点,使用 git 作为添加注释的快速方法。
  • git commit --amend 的问题在于它总是可以运行它。理想情况下,一旦您使用之前设置的未来评论提交,该评论将被删除,您必须设置新的未来评论才能再次这样做。
  • @MeiZhang 当我给出这个答案时,我假设提交消息会随着每次提交而改变,这是我使用 Git 10 多年以来的一般经验。
  • 当然我想在每次提交时更改消息,也许我没有很好地解释自己。我要说的是,理想的解决方案还可以跟踪何时使用了未来的提交。例如,您第二次尝试使用它时,它应该会失败:$ git next-commit "Implement client-side validation" ok $ git commit -m from-next-commit ok # git commit -m from-next-commit error : already used, set a new next-commit first。带有git commit --amend的探针,可以随时进行,无需任何检查。
【解决方案4】:

我的建议是使用您想到的“描述”剪切一个分支(例如git checkout -b "mz-client-side-validation"。记住您启动此分支的提交(使用标签,如果需要,请说mz-csv)和然后开始你的工作。如果你不专注于工作的性质,一开始并不重要。你应该养成的习惯是进行小提交(即使是坏消息)。所以虽然提交不是总是与客户端验证相关,它们小到足以在历史中发挥作用。

一旦您完成了实际功能的实现(可能通过多次提交),请执行git rebase -i mz-csv。现在您可以清理mz-client-side-validation 上的工作历史记录。剪切提交,合并它们,删除它们等,当你准备好时,将mz-client-side-validation 合并回主分支。

【讨论】:

    猜你喜欢
    • 2021-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-29
    • 1970-01-01
    • 2019-05-17
    • 2022-12-06
    • 1970-01-01
    相关资源
    最近更新 更多