我犯了一个错误,并希望恢复一个以某种方式从我的GitHub存储库中删除的文件。该文件是在线编辑和在GitHub界面中创建的amarkdown文件,因此它没有显示在我的本地日志中,并且在git fetch
或git 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?有一系列事件可能会导致这样的事情,我将来可以避免吗?谢谢!
答案 0 :(得分:3)
底线:您应该使用git bisect
执行此任务。
如果您希望手动搜索日志,可以使用git log --cc
(git v> 2.X)。它将显示每个提交中的更改列表
您当然可以将其转储到文件中并搜索文件内容或屏幕。
这是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使用125
和126
来指示特定的错误状态(127
是对于未找到的命令,127
用于找到命令但不可执行 - 这些细节无关紧要,因为它们是脚本中的正常错误,只要涉及bisect运行。)
这是一个有效的图形luustartion http://www.effectiveperlprogramming.com/wp-content/uploads/bisect1.png
以下是我的一个guthub回购中的示例代码,了解您如何使用它