Git可以在不丢失历史记录的情况下重新构造我的文件夹吗?

Git可以在不丢失历史记录的情况下重新构造我的文件夹吗?,git,Git,我现在有一个git回购,我是唯一使用它的人。 我想将根文件夹下的所有文件和文件夹放入新文件夹中,例如: 当前根描述 main -> src res 主要-> src 物件 新根 main -> app1 src res 主要-> 附件1 src 物件 如何在windows上的git中执行此操作而不丢失历史记录?您只需移动文件,git就会(或应该)注意到移动已经发生。它将保持历史 $Git log 如果出于某种原因,它没有注意到移动,您可以尝试将diff与一起使用——

我现在有一个git回购,我是唯一使用它的人。 我想将根文件夹下的所有文件和文件夹放入新文件夹中,例如:

当前根描述

main -> src res 主要-> src 物件 新根

main -> app1 src res 主要-> 附件1 src 物件
如何在windows上的git中执行此操作而不丢失历史记录?

您只需移动文件,git就会(或应该)注意到移动已经发生。它将保持历史

$Git log
如果出于某种原因,它没有注意到移动,您可以尝试将diff与
一起使用——更难找到副本。

TL;博士 继续:移动文件和目录。只需确保在目录重构时不会对同一提交中的文件进行任何编辑

为什么有效 Git是一个内容跟踪器,而不是文件跟踪器。如果您移动/重命名文件,但不对这些文件的内容进行其他更改,那么Git只需执行以下操作。目录操作不会更改文件blob;目录位置信息单独存储在树对象中

实际的重命名检测由和处理,并查找文件之间可配置的相似性百分比。这意味着Git并不直接存储移动或重命名;它根据提交之间的差异计算它们


所有这些的结果是,您的历史记录没有绑定到特定的文件名或目录结构。这在大多数用例中都能很好地工作,但与跟踪重命名为一级操作的系统形成对比。

当我移动或重命名一些文件时,我也丢失了历史记录。但我试图接触到陆龟注册源树应用程序

当我尝试使用gitbash命令时,我发现我可以看到历史

$Git log
在网上花了几个小时讨论原因后,我终于找到了答案

乌龟git默认设置,只显示实际文件历史记录。我的意思是,如果你重命名,如果你移动任何文件或文件夹,你就看不到历史。 要查看历史记录,您必须单击下面的陆龟设置复选框


这个答案是正确的。如果执行
mkdir-app1&&Git-mv-src-res-app1&&Git-commit
,Git会对您有所帮助。假设您实际上在
src
res
中都有一些文件(如果没有,git将忽略空dir)。演示如何在重命名/移动之前查看历史记录。只需在移动文件夹/文件后执行
git add-A.
。确保你不做任何编辑。类似的问题我有一些类似的问题。所有的答案似乎都遗漏了一些细节,但确实帮助我找到了答案。我必须mkdir、git add{directory}、git mv…、git commit,然后用git log检查旧的历史记录——遵循文件名。告诉git在将文件移动到新目录之前添加新目录会产生很大的不同,尽管它是空的,git状态在之前或之后都没有显示。(这应该是答案,但我不会在4年后尝试添加新答案。)@Kenny Ostrom不是真的,
git add{empty directory}
是一个NOOP。无论如何,仅仅因为我们移动了文件就必须使用
--follow
,这很糟糕。重命名父文件时,我丢失了子文件的历史记录?@Cian您要么不理解答案,要么做错了什么,要么有不寻常的边缘情况。你应该用尽可能多的细节和支持性的证据提出一个新问题。我可能有一个奇怪的案例,或者误解了-我会更详细地看一看,然后发布一个问题。Cheers git只检测到用git mv完成的重命名,对我来说。此外,由于最初的问题涉及一个mkdir(我的问题与此类似),我必须在移动文件之前在git中添加{empty directory name}。@CodeGnome git确实跟踪更改和移动。我做了一个小检查,似乎它的工作。您可以检查此提交