Git:在git中查找已删除的文件,不在日志中提交

时间:2016-05-01 21:52:41

标签: git github

我犯了一个错误,并希望恢复一个以某种方式从我的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?有一系列事件可能会导致这样的事情,我将来可以避免吗?谢谢!

1 个答案:

答案 0 :(得分:3)

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

底线:您应该使用git bisect执行此任务。

深入解释:

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

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

enter image description here

但是如果我有太多人提交手动检查它怎么办?

这是git bisect来救援的地方。 git bisect搜索您的回购并根据给定的退出代码,它可以确定哪个提交启动了"问题"。

您可以手动使用bisect或将脚本传递给脚本以使脚本自动化。 (见下面的bisect运行)

  

bisect命令通过提交历史记录进行二进制搜索,以帮助您尽快识别哪个提交引入了问题。

     

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

     

您可以将代码一分为二,以找出   首先你运行git bisect start来开始工作,然后你使用git bisect bad来告诉系统你当前的提交被破坏了。那么,你必须告诉bisect什么时候最后一个已知的好状态,使用git bisect good [good_commit] ...

<强> Bisect run

  

如果您有脚本可以判断当前源代码是良好还是错误,您可以通过发出以下命令来平分:

git bisect run my_script arguments
  

请注意,如果当前源代码为 good / old ,则脚本(上例中的my_script)应以代码0退出,并使用1和{{之间的代码退出1}}(含),127除外,如果当前源代码坏/新

     

任何其他退出代码都会中止bisect进程。

     

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

     选择

125作为用于此目的的最高敏感值,因为POSIX shell使用125126来指示特定的错误状态(127是对于未找到的命令,127用于找到命令但不可执行 - 这些细节无关紧要,因为它们是脚本中的正常错误,只要涉​​及bisect运行。)

这是一个有效的图形luustartion http://www.effectiveperlprogramming.com/wp-content/uploads/bisect1.png

enter image description here

以下是我的一个guthub回购中的示例代码,了解您如何使用它

enter image description here