【问题标题】:Git: Finding a deleted file in git, commits not in logGit:在git中查找已删除的文件,提交不在日志中
【发布时间】:2016-05-01 21:52:40
【问题描述】:

我犯了一个错误,我正在寻找一个以某种方式从我的 GitHub 存储库中删除的文件。该文件是在 GitHub 界面在线编辑和创建的 amarkdown 文件,因此它没有显示在我的本地日志中,并且在 git fetchgit pull 之后没有出现。我在这里阅读了很多其他关于如何查找已删除文件的帖子,但它们并不适合我的情况:

例如这篇文章:Git: How to search for a deleted file in the project commit history? 运行建议的命令:

git log --all -- **/thefile.*

没有产生任何结果(根本没有打印)。我还运行了在 git 历史记录中查找所有文件删除的命令:

git log --all --diff-filter=D --summary

并没有找到我要找的东西。

我认为这与我直接在 GitHub 远程存储库中创建和编辑文件有关。它可能从未出现在我的本地仓库中,并且可能已被推送以某种方式覆盖。我对 Git 相对缺乏经验,所以我不确定如何从这里开始。关于如何进行的任何建议,或者我是 S.O.L?是否有一系列事件可能导致这样的事情,我将来可以避免?谢谢!

【问题讨论】:

  • 只要您在某个时候提交了文件,它就可能存在。您是否运行git fetch 以确保您在本地拥有一切?你的仓库是公开的,所以我们可以帮忙看看吗?

标签: git github


【解决方案1】:

如何找到对存储库进行更改的时间?

底线:你应该使用git bisect来完成这个任务。


深入讲解:

如果您希望手动搜索日志,可以使用git log --cc (git v>2.X)。它将向您显示每次提交中的更改列表

您当然可以将其转储到文件并搜索文件内容或屏幕。


但是如果我有太多提交而无法手动检查它们该怎么办?

这就是git bisect 来救援的地方。 git bisect 搜索您的存储库并根据给定的退出代码确定哪个提交引发了“问题”。

您可以手动使用 bisect 或将其传递给脚本以使用脚本自动执行该过程。 (见下面的二分法)


bisect 命令对您的提交历史进行二进制搜索,以帮助您尽快确定哪个提交引入了问题。

假设您刚刚将您的代码发布到生产环境,您收到了关于您的开发环境中没有发生的事情的错误报告,您无法想象代码为什么会这样做。你回到你的代码,事实证明你可以重现这个问题,但你无法弄清楚出了什么问题。

您可以将代码一分为二
首先你运行 git bisect start 让事情顺利进行,然后你使用 git bisect bad 告诉系统你当前的提交被破坏了。然后,您必须使用 git bisect good [good_commit]... 告诉 bisect 上一次已知的良好状态是什么时候...


Bisect run

如果您有一个 脚本 可以判断当前源代码是 good 还是 bad,您可以通过发出命令来一分为二:

git bisect run my_script arguments

请注意,如果当前源代码 good/old,则脚本(上例中的 my_script)应以代码 0 退出,并以 1127 之间的代码退出(包括),除了125,如果当前源代码是bad/new

任何其他退出代码都会中止平分过程。

当当前源代码无法测试时,应使用特殊退出代码125。如果脚本使用此代码退出,则将跳过当前版本(请参阅上面的 git bisect skip)。

125 被选为用于此目的的最高合理值,因为126127 被 POSIX shell 用于指示特定的错误状态(127 用于未找到命令,126用于找到但不可执行的命令——这些细节无关紧要,因为它们是脚本中的正常错误,就 bisect run 而言)。


这是一个图形 luustartion,它可以工作
http://www.effectiveperlprogramming.com/wp-content/uploads/bisect1.png

这是我的一个 Guthub 存储库中的示例代码,看看你如何使用它

【讨论】:

  • 很酷的答案,没有考虑过使用这个。我唯一的问题是我无法标记“好”和“坏”的修订。我在我的历史中根本没有找到该文件,我只是在寻找它的任何版本(它不是代码,它只是我写的一个很长的降价页面,以便与 GitHub 上的同事分享)。我的脚本测试了这个文件是否存在,但我认为为了让一个“好的”提交传递给 bisect,我必须能够找到一个包含这个文件的提交。有没有解决的办法?感谢您如此深入和周到的回答!
  • 嘿。我制作了那个图像,多年后我在这里寻求关于我已经写过的东西的帮助。当我搜索某些东西并找到自己的答案时,情况更糟。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-14
  • 2021-04-24
  • 1970-01-01
  • 2012-08-11
  • 2012-09-10
  • 1970-01-01
  • 2021-12-31
相关资源
最近更新 更多