如何提交未更改和新消息?


136

commit如果未对文件进行任何更改,如何创建新消息并创建新消息?

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

Answers:


167

这样做的理由很少,但是与空提交消息--allow-empty相比,该参数用于空提交(未更改文件)--allow-empty-message。您还可以通过键入git help commit或访问在线文档来阅读更多内容

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


这里你可能要一个空的承诺(包含一些评论),有几个原因:

  • 作为“声明式提交”,添加叙述或文档(通过DavidNeiss),包括有关通过测试或皮棉的事后数据(通过Robert Balicki)。
  • 测试git命令而不产生任何更改(通过Vaelus)。
  • 使用gitolite(通过Tatsh)重新创建已删除的裸仓库。
  • 任意创建一个新的提交,例如重新触发构建工具(通过mattLummus)或出于个人日志记录或度量(通过DynamiteReed)。但是,请三思:根据提交/合并结构的不同,提交可能会持续很长时间,因此,“不提交任何内容”策略可能会无意中污染了临时工作流工件的团队存储库,从而使代码修订版与临时工。

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

  • 始终指向特定状态的提交(例如“上次接受的提交”或“当前登台提交”)的单独分支或轻量级标签。
  • 带注释的标记,用于记录时间戳,提交者和消息,指向现有的提交,而无需在提交树本身中添加条目。
  • git notes 将可变的注释关联到现有的不可变提交之上。

2
我已经开始遵循git flow 分支模型。当你犯了一个dev分支的形式master,然后一个feat分支立即从dev,该feat分支的外观来自于master分支,因为是在不区分提交dev该分支feat分支得来的。首次创建dev分支时执行空提交有助于建立dev分支,因为它是独立于的无限持久分支master。通常,当您将分支用作图层,并通过一次提交创建两个图层时,这很有用
新手C

2
另一个原因:如果在推送之前忽略了提交消息中的重要内容,那么commit --amend如果遥控器不允许强制推送,则无法执行。这样,您可以允许开发人员查看上一次提交附带的重要消息。
Andy J

1
我想这样做是因为我推送了一个提交,但是忘记在提交消息中提及某些内容。我们的提交消息已与问题跟踪和持续集成软件集成在一起,提交消息的内容会影响那些应用程序。有没有更好的办法?就我而言,这似乎是最好的解决方案。我唯一能想到的就是能够以某种方式还原先前的提交。
sytech's

1
我只是用它来触发我们的预提交钩子,该钩子为数据库编写脚本。因此发生了变化,只是git在脚本运行之后才看到它们。当然可以手动运行它,但是那样会使脚本运行两次。
yoyodyn

1
与github和gogs内置到git服务器的问题跟踪进行交互时非常有用。
SimonF

37

如果我理解正确,那么您想进行一次空提交。在这种情况下,您需要:

git commit --allow-empty

34

空提交并显示一条消息

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

带有空消息的空提交

git commit --allow-empty --allow-empty-message


3

也许作为一种更明智的选择,您可以创建一个带注释的标签(带有消息的命名提交)。参见git tag -a选项。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.