我有以下场景:
1 和 3 中的文件几乎相同,只是做了一些微小的更改,但由于多次迭代,我最终创建了一个全新的文件并删除了旧文件。有没有办法在文件 3 中保留/移动文件 1 的 git 历史记录?
我能想到的一种方法是恢复到我删除旧文件的提交,然后使用
git mv src/GetData.cs src/Get/GetData.cs
将其移动到新文件夹,但中间有很多其他提交和更改,所以我想避免这种情况。
提前致谢。
Git 没有文件历史记录。没有什么可以保存或恢复的。
\n\nGit 有提交,并且提交已成为历史。这就是\xe2\x80\x94,这就是你所拥有的一切。添加提交以添加更多历史记录。
\n\n现在,提交确实包含文件,您可以要求 Git 遍历提交历史记录,但仅列出一些特定的提交,即按名称触及特定文件的提交。当您这样做时,您会立即遇到名称随时间变化的文件的问题。
\n\n这涉及到某些文件是“相同”文件的含义。这是一个哲学问题,这意味着它没有一个好的答案。:-) 对于这方面的极端例子,请考虑我祖父的斧头的悖论:我父亲更换了头部,我更换了手柄,但这是我祖父的斧头;或者更一般地说,忒修斯之船。
\n\nGit 的答案是:如果您添加--follow到一个git log命令,其中您告诉它跳过(用于列出输出目的)任何不更改我命名的文件的提交,Git 将查看该文件似乎已存在的提交删除,并查明在父提交中是否存在具有其他名称的文件,该文件具有足够相似的内容,可以将其称为“同一文件”。如果内容在单个提交跃点(不是合并提交)中 100% 相同,Git 将始终(并且很快)找到该文件。在其他情况下,你要抓住机会。如果 Git 发现名称已更改,Git 会继续查找git log更改了一个文件的提交,但现在它正在查找更改了存储在先前名称下的文件的提交。
Git 的另一个答案是:你为什么关心? 每个快照都完全保留整个状态。如果您检查提交 1 或提交 7,为什么您关心是否src/GetData.cs与“相同”文件src/Get/GetData.cs?您将在快照中永久保留(或至少只要历史记录中存在提交)具有正确名称的正确文件内容。
(有时需要关心,与操作系统的文件身份概念有关。Git 不关心这些。)
\n| 归档时间: |
|
| 查看次数: |
1081 次 |
| 最近记录: |