我重命名了一个文件夹,然后提交了更改。文件夹中的所有文件都应用了相同的提交消息。如何将提交应用到文件夹,而不将提交消息应用于其文件?
的数据
lfapxunr1#
这个问题是建立在一个错误的前提上的。Git不会“将提交消息应用到文件”,它只是为每个单独的提交存储提交消息。这里你看到的是你的git前端(无论是什么呈现你截图的目录列表)试图显示最后一次提交的提交消息,该提交消息触及了一个文件。而且由于在git中移动一个文件实际上与删除并创建一个不同的名称是一样的,所以文件在重命名提交时最后会被触及。但是再一次:绝对没有办法改变git存储这类提交的方式。你能做的最好的就是找到一个工具来显示你想要的东西。例如,git diff有一个功能,试图找到重命名并适当地考虑它们,但这是git diff提供的功能,并且不会改变底层提交的存储方式。
git diff
ylamdve62#
如何将提交应用于文件夹,你不能,原因很简单,Git中没有文件夹。也没有真正的文件,但更接近:存在带有路径名的blob。因此,如果您有blob myFolder/a 和blob myFolder/b,并且在您的世界中将文件夹重命名为 myDirectory,那么在Git的世界中,您只需将这两个blob重命名为 myDirectory/a 和 myDirectory/b。(实际上,它比这更棘手;您已经删除了这些斑点并创建了与它们外观相似的斑点。不过,我们还是跳过这一步吧。)其他一切都只是外在的表象。Git不会将提交消息附加到文件或文件夹中;它会将它们附加到提交中。Git只知道这些,提交.屏幕截图中的文件和文件夹图标,沿着它们旁边的提交消息,只是为了帮助您可视化而绘制的幻象。Git和这件事没有关系如果你在命令行询问Git自己,它的commit里有什么,你会得到一个完全不同的答案。
cfh9epnr3#
在Git下,不再存在文件夹版本控制的概念,只有文件。因此,存储库中存在一个文件夹,因为它包含一个或多个跟踪文件。因此,每个提交的文件共享相同的提交消息。
nhaq1z214#
您无法避免重命名文件夹中文件的名称更改。文件的实际名称是从根目录(在Linux上)或从驱动器根目录(在Windows上)开始的整个路径。您必须git add整个文件夹才能提交此更改。顺便说一句,在Git中重命名文件和文件夹通常不是最佳实践,因为有时无法通过历史记录跟踪更改。也就是说,如果你试图查看其中一个重命名的文件的历史记录,Git可能无法拼凑出当前文件与它的前一个不同名称的文件之间的关系。
git add
4条答案
按热度按时间lfapxunr1#
这个问题是建立在一个错误的前提上的。
Git不会“将提交消息应用到文件”,它只是为每个单独的提交存储提交消息。
这里你看到的是你的git前端(无论是什么呈现你截图的目录列表)试图显示最后一次提交的提交消息,该提交消息触及了一个文件。
而且由于在git中移动一个文件实际上与删除并创建一个不同的名称是一样的,所以文件在重命名提交时最后会被触及。
但是再一次:绝对没有办法改变git存储这类提交的方式。你能做的最好的就是找到一个工具来显示你想要的东西。
例如,
git diff
有一个功能,试图找到重命名并适当地考虑它们,但这是git diff
提供的功能,并且不会改变底层提交的存储方式。ylamdve62#
如何将提交应用于文件夹,
你不能,原因很简单,Git中没有文件夹。也没有真正的文件,但更接近:存在带有路径名的blob。因此,如果您有blob myFolder/a 和blob myFolder/b,并且在您的世界中将文件夹重命名为 myDirectory,那么在Git的世界中,您只需将这两个blob重命名为 myDirectory/a 和 myDirectory/b。
(实际上,它比这更棘手;您已经删除了这些斑点并创建了与它们外观相似的斑点。不过,我们还是跳过这一步吧。)
其他一切都只是外在的表象。Git不会将提交消息附加到文件或文件夹中;它会将它们附加到提交中。Git只知道这些,提交.屏幕截图中的文件和文件夹图标,沿着它们旁边的提交消息,只是为了帮助您可视化而绘制的幻象。Git和这件事没有关系如果你在命令行询问Git自己,它的commit里有什么,你会得到一个完全不同的答案。
cfh9epnr3#
在Git下,不再存在文件夹版本控制的概念,只有文件。
因此,存储库中存在一个文件夹,因为它包含一个或多个跟踪文件。
因此,每个提交的文件共享相同的提交消息。
nhaq1z214#
您无法避免重命名文件夹中文件的名称更改。文件的实际名称是从根目录(在Linux上)或从驱动器根目录(在Windows上)开始的整个路径。您必须
git add
整个文件夹才能提交此更改。顺便说一句,在Git中重命名文件和文件夹通常不是最佳实践,因为有时无法通过历史记录跟踪更改。也就是说,如果你试图查看其中一个重命名的文件的历史记录,Git可能无法拼凑出当前文件与它的前一个不同名称的文件之间的关系。