重新组织项目文件夹后丢失git历史记录

重新组织项目文件夹后丢失git历史记录,git,version-control,Git,Version Control,大约一个月前,我做了一个承诺,包括创建新的文件夹和子文件夹,并在它们之间移动源代码文件。我只是从那以后第一次查看我的历史记录,意识到git已经“丢失”了历史记录,因为原始文件被删除,然后被重新添加,我想——也就是说,当我在git GUI中查看文件时(它在NDA下,所以我不能直接讨论它,但例如,这个存储库在GitHub上也被破坏了。GitHub清楚地显示了它在一系列移动中检测到提交。)它只显示每个文件的历史记录,直到重新组织项目文件夹时 在读了几个问题(,)之后,我比开始时更迷茫了。从这些答案中听

大约一个月前,我做了一个承诺,包括创建新的文件夹和子文件夹,并在它们之间移动源代码文件。我只是从那以后第一次查看我的历史记录,意识到git已经“丢失”了历史记录,因为原始文件被删除,然后被重新添加,我想——也就是说,当我在git GUI中查看文件时(它在NDA下,所以我不能直接讨论它,但例如,这个存储库在GitHub上也被破坏了。GitHub清楚地显示了它在一系列移动中检测到提交。)它只显示每个文件的历史记录,直到重新组织项目文件夹时


在读了几个问题(,)之后,我比开始时更迷茫了。从这些答案中听起来,我根本无法解决这个问题?我真的非常感谢这里的任何帮助。

如果你真的错过了历史中的修订版(从你的问题中还不完全清楚到底错过了什么)现在才一个月左右,你可能还有时间——看看reflog;它保存了你签出的所有参考资料的副本,所以如果你犯了错误,你可以找回你以前拥有的

默认设置是将reflog条目保留90天,它们将在
git gc
过期

git help reflog
你试过设置了吗

告诉git检测重命名。如果设置为任何布尔值,它将启用基本重命名检测。如果设置为“复制”或“复制”,它也将检测复制


注意:要跨重命名跟踪单个文件的历史记录,需要使用“
git log-p--follow file
”.

我将运行一个脚本,该脚本将遍历所有对象。您需要首先解压缩所有包文件。该脚本将检查类型,如果是提交,您将查看您是否是作者。然后检查日期。列出这些内容并grep查找所需的文件名。一旦您有了感兴趣的提交,请使用创建一个分支

git branch RecoveredWork hash-of-your-commit
看看你有没有想要的东西

git log RecoveredWork --graph --decorate

在这里,您可能需要执行一些过滤分支、嫁接和/或重定基来再次链接历史记录。

在Git中,没有文件移动的概念

<> P>一些工具,如GITHUB,考虑一个包含一个名为X的文件,该文件已被删除,一个名为X的文件已经被创建了一个文件移动。 根据Linus Torvalds的说法,文件移动只是重构的一种特殊情况;因此Git不会对其进行区别对待。与其他许多情况一样,这种特殊情况的处理由更高级别的工具(如前端)来完成


有关此主题的更多信息,请查看Linus Torvalds。

据我所知,您需要:

git log --follow some_file.cpp

有关详细信息,请参阅。我不确定这是否是您想要的;但在git的情况下,git跟踪的是内容而不是文件。问题是,确定这些信息非常昂贵,并且假设您通常不需要这些信息…

我可以想出一些可能性。如果事情只是随意处理,但不跟踪,那么我认为是这样的这是在两个不同的提交中完成的…一个要删除,另一个要重新添加。在此之前,在提交中创建一个新的分支,在下两个提交中作为一个提交加载,然后在这之后追加所有内容


如果不是这样,您可能需要使用git log-M-C查看提交情况。如果您想在git中移动文件夹,可以使用git mv

我在存储库的根目录中有一堆文件夹,希望将它们移动到两个子目录中,因此我使用**mkdir创建了两个新目录

然后,我将文件和文件夹一次移动到新目录中,如下所示:

git mv folder1/ newDirectory1/
git mv file1.txt newDirectory2/
git mv folder2 newDirectory1/src
repository/
   newDirectory1/
      folder1/
      src/
   newDirectory2/
      file1.txt
等等

我有一个例子,我想将其中一个目录重命名为src,我是这样做的:

git mv folder1/ newDirectory1/
git mv file1.txt newDirectory2/
git mv folder2 newDirectory1/src
repository/
   newDirectory1/
      folder1/
      src/
   newDirectory2/
      file1.txt
这导致一组文件如下所示:

git mv folder1/ newDirectory1/
git mv file1.txt newDirectory2/
git mv folder2 newDirectory1/src
repository/
   newDirectory1/
      folder1/
      src/
   newDirectory2/
      file1.txt

完成后,我创建了一个名为“重组”的新分支因此,我不会干扰另一个开发人员在master分支中所做的工作。他继续处理文件,当他将新的更改推送到master时,我将这些更改拉入并合并到我的分支中,所有工作都如我所希望的那样进行。已移动的文件从其原始位置正确引用,并收到它们的commits.

我应该说得更清楚些——我没有丢失数据,但当我试图在git GUI中查看给定文件的历史记录时,它只会显示回我的“重组”commit@JUST:这次你的观点是错误的。所以这绝对是关于版本控制问题的正确答案。当然,OP的链接指向以前的git问题这不是吗?只要看看常见问题解答:“程序员常用的软件工具”。我想这是你的一票——也许你应该在再次行使这一特权之前先去看看常见问题解答和特权页。@Jefromi:我听到了,但自从“标记集”出现后,我停止了这种斗争;)看。他们可以把这些问题提升到他们想去的任何地方。。。我要去看他们;)@沃克:我认为,如果不是为了我们,为了寻找答案的人们,我们还是应该把问题放在一个地方。@Jefromi:同意。我再次对这一努力作出承诺;)看起来TC实际上删除了一个文件,然后在以后(或类似的情况下)将其恢复为修订版,这意味着Git不会将其检测为重命名。GitHub上的这个存储库也“坏了”,如果我能让GitHub正确地阅读它,我会很高兴的。我不知道Git的一般情况,但是如果你移动它,GitHub会丢失文件的历史记录。我在我的一个github repos中发现了这个问题,我移动了整个目录结构,其中的所有文件现在都显示为历史记录中有1个元素。你答案中的链接已失效,你有其他来源吗?或者你可以发布整个报价吗?除了提供的链接没有其他来源。。似乎整个过程并没有如预期的那样运作,所以答案是肯定的,历史已经失去了?@sindri_baldur答案是,git t t