如何不进行任何更改和新消息?

时间:2012-09-18 03:33:58

标签: git commit

如果没有对文件进行任何更改,如何制作新的commit并创建新邮件?

这是不可能的,因为提交的代码(SHA?)将是相同的?

5 个答案:

答案 0 :(得分:125)

很少有理由这样做,但空提交的参数为--allow-empty,而空消息的参数为--allow-empty-message。您还可以通过输入git help commit或访问the online documentation来了解更多信息。

虽然树对象(它有自己的散列)将是相同的,但提交实际上会有不同的散列,因为它可能会有不同的时间戳和消息,并且肯定会有不同的父提交。所有这三个因素都集成到git的对象哈希算法中。


有几个原因可能需要空提交(包含一些注释):

  • 作为“声明性提交”,添加旁白或文档(通过DavidNeiss),包括有关传递测试或lint的事后数据(通过Robert Balicki)。
  • 测试git命令而不生成任意更改(通过Vaelus)。
  • 使用gitolite(通过Tatsh)重新创建已删除的裸存储库。
  • 任意创建新提交,例如重新触发构建工具(通过mattLummus)或为了个人日志记录或指标(通过BlueJ774)。但是,请三思而后行:根据您的分支/合并结构,提交可能会存在很长时间,因此“只提交任何内容”策略可能会无意中使用临时工作流工件污染您的团队的存储库,并且很难将代码修订与短暂的残酷。

将元数据添加到提交树的其他策略包括:

  • 单独的分支或轻量级标记,始终指向特定状态的提交(例如“最后接受的提交”或“当前的分段提交”)。
  • Annotated Tags用于记录时间戳,提交者和消息的方法,指向现有提交而不在提交树本身中添加条目。
  • git notes将可变注释与现有的不可变提交相关联。

答案 1 :(得分:28)

如果我理解你,你想做一个空提交。在这种情况下,您需要:

git commit --allow-empty

答案 2 :(得分:17)

使用消息进行空提交

var subDocument = data.subDocument.id(subDocumentId);
if (subDocument) {
  // Do some stuff
}
else {
  // No subDocument found
}

使用空消息进行空提交

git commit --allow-empty -m "Empty test commit"

答案 3 :(得分:2)

也许作为一个更明智的选择,你可以创建一个annotated tag(带有消息的命名提交)。请参阅git tag -a选项。

答案 4 :(得分:1)

如果您使用的是像gitversion这样的系统,那么做这种提交很有意义。您可以使用+ semver:major comment来进行专门用于碰撞主要版本的提交。