是否可以进行 git 差异而不会导致任何更改?

Is it possible to make a git diff that results in no changes?

所以这可能是个愚蠢的想法,可能有 workarounds/other 解决方案。我很好奇这些,也很好奇下面这个问题的具体答案

是否可以为提交创建一个差异,该差异只是简单地删除和添加完全相同的代码,从而让您有机会创建一个真正只是特定代码行的元数据的提交,即创建评论的方式在这些行被更改之前,它会暂时附加到代码行吗?

原因: 我的 git 反应让我想确保每个提交都是完全工作的代码,这样您就不必猜测如果需要回滚某些内容需要弹出多少提交。然而,这实际上为您提供了一条提交消息,以应用于该提交中更改的所有代码行。 (也许这是我的根本问题?)

如果有一种方法可以创建一个非差异,我可以在上面创建一个提交,我可以简单地向几行代码添加一个“评论”(提交消息),嵌入其中的是“评论”的作者,以及“评论”发表时间的日期戳。

然后我就可以去掉代码中所有的硬注释(即以 // 或 # 或其他任何内容开头的行),如果我想查找注释,请查看 blame。如果我改变了什么,我要么故意保留评论,写一个新的,要么就让它留给我所做的任何功能性改变。通过这种方式,您将永远不会有不需要完成的 TODO,并且一旦您更改了代码,您将永远不会有不再适用的 NOTE。

Is it possible to create a diff for a commit that simply removes and adds the same exact code.

git 不会为每个提交保存 diff,而是保存 complete tree of folders and files(尽管在一个非常聪明而有效的方式)。您看到的差异是通过比较相关提交及其父项引用的两棵树来动态计算的。

您可以使用 --allow-empty 选项创建一个完全不更改代码的提交(即它引用与其父提交完全相同的树)。但这不会让您引用任何文件或代码行。

Is it possible to create a diff for a commit that simply removes and adds the same exact code thereby giving you an opportunity to create a commit that is really just metadata to specific lines of code, i.e. way to create a comment that is ephemerally attached to the lines of code until those lines are changed?

简单地说,不。您的评论示例将是代码更改,因此它会显示在差异中。

一些可能的选择:

  1. 您可以创建一个空提交,如 中所述,它没有任何更改,只有一条提交消息,您可以在其中说出您想要的任何内容。
  2. 您可以创建 2 次提交,其中第二次撤消第一次。实现此目的的一种方法是在 1 次提交中进行一些更改,然后还原将进行第二次提交的提交。在这种情况下,第一次提交和第二次提交的父提交之间的差异将没有变化,但是第一次提交的父提交和第一次提交之间的差异将包含您希望捕获的更改,并可能对其进行处理。