Git提交没有提交消息

Nik*_*Nik 100 git message commit

如何在不指定提交消息的情况下提交更改?为什么默认需要?

Jer*_*man 124

git通常需要非空消息,因为提供有意义的提交消息是良好的开发实践和良好的存储库管理的一部分.提交消息的第一行在git中的所有位置使用; 有关更多信息,请阅读"关于Git提交消息的注意事项".

如果您打开Terminal.app,cd到您的项目目录,git commit -am ''您将看到它失败,因为不允许空提交消息.较新版本的git具有
--allow-empty-message命令行参数,包括最新版Xcode中包含的git版本.这将允许您使用此命令进行带有空消息的提交:

git commit -a --allow-empty-message -m ''
Run Code Online (Sandbox Code Playgroud)

--allow-empty-message标志之前,您必须使用commit-treeplumbing命令.您可以在Git书的"Raw Git"一章中看到使用此命令的示例.

  • 我认为句子"提供有意义的提交信息**是良好开发实践的一部分"是错误的 - 可以说提供有意义的提交信息**被认为是良好开发实践的一部分,因为无论如何,语句是分裂的 - 我相信较少的信息有时会导致较少的混淆,特别是因为git显然将实际的更改存储到存储库中,而`git diff`将准确地向关注方显示*提交包含的内容,而不是依靠人类的书面描述.机器应尽可能避免劳动力. (13认同)
  • @amn,我也刚开始想知道我写的所有那些写得很好的提交消息,这些消息永远不会被任何人阅读。现在对我来说,这种习惯的价值在于它迫使我仔细查看更改以尝试描述它们,这有时会让我注意到错误。不过,你是对的。我会考虑更多地关注代码而不是提交消息。 (6认同)
  • Git不再仅仅用于代码开发.当我更新GitHub wiki页面或Overleaf LaTeX文档时,通常没有什么可说的,因为我正在更新_documentation._关于更改的语义上有意义的所有内容都包含在diff中.我实际上发现自己使用更改的文本作为提交消息本身:完全冗余! (5认同)
  • @amn ,有时 `git diff` 的输出不是不言自明的,即使提交者认为是这样。 (4认同)

dal*_*ez1 25

如果你为它添加一个别名,那么它会更好吗?

git config --global alias.nccommit 'commit -a --allow-empty-message -m ""'
Run Code Online (Sandbox Code Playgroud)

现在你只是做一个nccommit,nc因为没有评论,一切都应该被提交.


lac*_*cal 17

在处理重要的代码更新时,如果您真的需要一个中间安全点,您可能会这样做:

git commit -am'.'
Run Code Online (Sandbox Code Playgroud)

或更短:

git commit -am.
Run Code Online (Sandbox Code Playgroud)

  • 添加带有消息“.”的提交 (4认同)
  • 当我几乎不记得自己在提交中放入了什么并且懒得“比较”它们时,我会使用这种方法。 (2认同)

Von*_*onC 12

注意:启动git1.8.3.2(2013年7月),以下命令(由Jeremy W Sherman 上面提到)将不再打开编辑器:

git commit --allow-empty-message -m ''
Run Code Online (Sandbox Code Playgroud)

提交25206778aac776fc6cc4887653fdae476c7a9b5a:

如果使用-mgit commit 选项指定了空消息,则启动编辑器.
这是出乎意料的,没有必要.
而不是使用消息字符串的长度来检查用户是否指定了一个,直接记住是否-m给出了选项.


git 2.9(2016年6月)改进了空消息行为:

Adam Dinwoodie()提交178e814(2016年4月6日). 请参阅Jeff King()提交的27014cb(2016年4月7日).(由Junio C Hamano合并- -提交0709261,2016年4月22日)me-and
peff
gitster

commit:不要忽略给出的空消息 -m ''

  • " git commit --amend -m '' --allow-empty-message",即使看起来很奇怪,也是修改提交的有效请求,根本没有消息.
    由于-m在命令行上存在错误检测,我们最终保留了原始提交中的日志消息.
  • " git commit -m "$msg" -F file"是否应该被拒绝是否$msg为空字符串,但由于相同的错误,在$msg空时不被拒绝.
  • " git -c template=file -m "$msg""应该忽略模板,即使$msg它是空的,但它没有,而是使用模板文件中的内容.


Dan*_*rka 5

Git 需要提交才能有评论,否则它不会接受提交。

\n\n

您可以使用 git 配置默认模板作为默认提交消息,或者可以在 git 中查找 --allow-empty-message 标志。我认为(不是 100% 确定)你可以重新配置 git 以接受空提交消息(这不是一个好主意)。通常,每次提交都应该是您的消息中描述的一些工作。

\n

  • 不知道为什么这个答案被否决了。我同意强制 Git 接受空提交消息或使用“保存”等消息是一个坏主意。别再对抗了,去学习这个该死的工具吧。 (4认同)

Ste*_*cia 5

你不需要 git 来完成这个任务。创造性地使用 bash 函数就能很好地达到目的。如果您不关心消息,只需设置默认消息即可,然后忘记它。

function gitcom() {
  git commit -m "my default commit message"
}
Run Code Online (Sandbox Code Playgroud)

如果您真的喜欢冒险,您可以使用一个命令添加、提交和推送

function gitzap() {
  git add . && git commit -m "whatevs" && git push $1 $2
}
Run Code Online (Sandbox Code Playgroud)

然后你将运行它

gitzap origin master
Run Code Online (Sandbox Code Playgroud)

您甚至可以更深入地使用 parse_git_branch 来节省一些击键次数,或者设置“origin”和“master”的通用默认值。

  • 如果你调用脚本 `git-com` 和 `git-zap` (不带扩展名)并将它们放在 git 可以找到它们的地方(即你的 PATH 中的某个地方),git 将它们视为常规 git 命令,你可以像这样调用它们: `git com`, `git zap origin master` (2认同)

Dan*_*zzi 5

--allow-empty-message -m ''(和-m "")在 PowerShell 上的 Git 2.29.2 中失败:

错误:开关“m”需要一个值

(奇怪的是,一边是反引号,另一边是单引号)


以下内容在 Linux、PowerShell 和命令提示符中始终有效:

git commit --allow-empty-message --no-edit
Run Code Online (Sandbox Code Playgroud)

--no-edit位可以解决问题,因为它会阻止编辑器启动。

我发现这种形式比强制使用-m ''.

  • 我做到了。它们在 PowerShell 中也失败了(它们在命令提示符下工作,但我不使用它。)不必记住每个平台的不同语法,这就是我更喜欢“--no-edit”的原因。 (3认同)