在'之前编写git提交消息;git提交';

在'之前编写git提交消息;git提交';,git,Git,我从Perforce学习Git 据我所知,您必须按照提交时的相同步骤编写提交消息。或者,我是否错过了如何更早地写下这条信息,并让它在我准备好提交之前一直挂着 我非常喜欢perforce中的工作流,您可以随时编辑变更列表描述,然后在准备就绪时签入。就个人而言,我喜欢在编写代码时多次打开描述和文档,或者在我想到值得注意的事情时指出 可以使用Git?将其写入文件;在工作时保持更新。在实际提交时包括最终版本 如果您正在使用git的图形化前端,那么您必须指定哪个前端,以便有人能够专门提供帮助。通常,您可以

我从Perforce学习Git

据我所知,您必须按照提交时的相同步骤编写提交消息。或者,我是否错过了如何更早地写下这条信息,并让它在我准备好提交之前一直挂着

我非常喜欢perforce中的工作流,您可以随时编辑变更列表描述,然后在准备就绪时签入。就个人而言,我喜欢在编写代码时多次打开描述和文档,或者在我想到值得注意的事情时指出


可以使用Git?

将其写入文件;在工作时保持更新。在实际提交时包括最终版本

如果您正在使用git的图形化前端,那么您必须指定哪个前端,以便有人能够专门提供帮助。通常,您可以简单地粘贴消息

从命令行使用git,它将打开带有临时文件的编辑器,您可以将消息读入其中(例如:vim中的r filename)

或者可以使用shell将该文件作为-m参数的值读取:

# bash example, may work elsewhere
git commit -m "$(<filename)"
#bash示例,可能在其他地方起作用

git commit-m“$”(内置,据我所知不是这样。如果你真的很绝望,你可以在终端中编写它,比如
commit=“Fix for bug#14453”
commit=“$commit and bug#4329”
然后像
git commit-m“$commit一样提交“

只要您没有向他人推送您的提交,您就可以执行
git提交--amend
。这将允许您修改提交以及提交消息


我发现这确实有助于“尽早且经常提交”,而不会被琐碎的提交数量所压倒。

看看
-t
标志和
git commit

这允许您指定一个文件作为提交消息的基础。编辑器仍会被调用,但至少您可以使用预先创建的提交消息

或者,还有另一个工作流程可以与git一起使用,它可能更适合您的工作方式:

使用git,您可以在与主线不同的分支上工作,并使用自己的消息进行大量小的提交。尽管这些提交本身可能无法解决您正在处理的问题,但它们确实提供了一种方法,可以使用您可能正在更新的相同类型的消息保存您工作的中间状态在提交消息文件中

一旦您准备好提交全部工作,就可以使用
rebase
命令和
squash
将这些提交组合在一起。然后,您的编辑器将被调用,其中包含用于较小提交的所有单个消息,然后您可以将这些消息组合编辑为单个消息


这比这里听起来要简单得多,而且是一种更像git的方法。

您可以使用
git gui
并在工作时将其保持打开状态。为即将进行的错误修复编写提交消息,然后进行实际的代码更改、暂存并提交。

您可以使用以下别名:

git config --global alias.prepare '!${EDITOR:-vi} $(git rev-parse --git-dir)/.template'
git config --global alias.commitp '!git commit -F $(git rev-parse --git-dir)/.template'
用法:

git prepare
EDITOR=nano git prepare # heeds standard EDITOR variable
git commitp
这会将提交消息保存在
.git/.template


但与此相反,您应该真正使用一个工作流,在该工作流中,您可以经常提交原子更改和小更改,并在必要时使用功能分支来对这些更改进行分组。如果您使用
git merge--no ff$branch
,您可以使用
git log--first parent
来忽略这些分支。

我相信问题是在编写任何代码之前是否能够编写描述(提交消息)(当然,在编写代码时是否能够修改它)。(我以前使用过Perforce和类似Perforce的系统,我知道有时候在实际编写代码之前,保持这种心态会有所帮助,在这种心态下,你可以先写下你要做的事情的描述。)

除了将消息写入文件并使用
-t
--template=
)或
-F
--file=
)标志来提交
-git
),另一种方法是:

  • 使用
    git commit进行空提交--允许空提交
    。这将像任何
    git commit
    一样,打开一个编辑器,您可以在其中编写消息。编写它并完成提交

  • 进行代码更改

  • 使用
    git Add
    添加您想要添加的文件,然后使用
    git commit--amend
    (或者如果您不想使用
    git Add
    选择特定的文件,只需
    git commit--a--amend
    )。这将使以前的非空提交现在不再为空,并且您还可以编辑消息以更接近您实际执行的操作(如果愿意)

  • (如果您与其他人一起工作,请记住在执行此操作时不要推动git
    :不要修改您已经推动的提交!)

    当然,保持提交尽可能小和原子化的建议仍然适用,但这种方式允许您在编写代码之前编写消息。(另一个答案中已经提出了
    git commit--amend
    方法;我只是补充指出,您可以一直使用
    git commit--allow empty

    使用
    --file
    参数执行
    commit
    命令

    git commit --file <absolute or relative path to file>
    


    您可以在任何文本编辑器中处理提交消息并保持其打开状态。只需保存文件,然后使用常量提交命令进行提交。它从文本文件(.txt)中获取消息,而无需打开编辑器。

    要添加到MatrixFrog的答案,GitKraken GUI()提供类似的功能。它允许在实现实际更改之前/同时在GUI中起草提交消息

    此外,它允许设置模板来构造提交正文,例如:


    变化:

    --

    新测试:

    酒吧
    git commit --file ../commit-message.txt
    
    $ git commit --allow-empty
    # create message
    $ git commit --allow-empty --amend
    # edit message
    
    $ git config --global alias.draft 'commit --allow-empty'
    $ git draft
    # create message
    $ git draft --amend
    # edit message