我把我的本地仓库放在了github上。在 github 存储库中,我通过单击“we recommend a README file link”创建了 README 文件。我在里面写了一个详细的内容,并提交了。但是我没有将这个文件克隆到我的本地存储库中。最近,我做了一些更改并将它们推送到github repo。今天我注意到 README 文件丢失了。我检查了我的提交,但在那里找不到与 README 相关的任何内容。
我正在使用 Eclipse egit 插件与 github 存储库进行交互。我确实在 Eclipse“团队”菜单中单击了“同步工作区”,只是为了检查它做了什么——这是在我注意到文件丢失之前。
有没有办法找回我的 README.md 文件?请告诉我。
来自评论,楼主说:
是的,我确实在 Egit 中勾选了一个名为“force push”的选项,因为没有它 给我一个错误。与常规相比,用力推动有什么作用 推?
但是,我还没有进行抓取或拉取操作——我通常不会这样做,因为我 唯一一个使用那个 repo 的,所以我当前的本地副本将是最新的。
是的,这听起来确实像是您最终强制推送了您的本地副本 你的回购,然后覆盖你对你的自述文件所做的更改 GitHub,特别是因为你说你从不获取或拉取。
从不获取或拉取的问题是你描述了编辑和 通过 GitHub 的 Web 界面提交 README 文件:
我通过点击“我们推荐一个 README 文件链接”创建了 README 文件。我 里面写了详细的内容,commit了。但我没有克隆这个文件 进入我的本地存储库。
所以你的远程仓库已经提交了你的本地仓库没有。大概就是这样 当您尝试推送时收到的错误消息,以及这些 线,对吧?:
git push origin master
# To https://github.com/user/repo.git
# ! [rejected] master -> master (non-fast-forward)
# error: failed to push some refs to 'https://github.com/user/repo.git'
该消息基本上意味着您需要 将远程提交与 在您的本地存储库中工作。但不是那样做,你只是 通过 使用 force-push,如果你不真正理解,你不应该这样做 它做了什么。
用力推时要非常非常小心。只有当你理解它是什么时才使用它 确实并且您确定使用它是您想要做的,因为它是其中之一 Git 初学者最常见的丢掉工作的方式。
由于您从未从您的存储库中获取或拉取,该文件基本上是 现在无法恢复,因为它从未下载到您的本地远程。你会 需要重新开始。
它不是不可恢复的,它有可能存在于远程存储库中
reflog
。通常你不能访问远程存储库 reflog 但 github 有事件 API。
# show the events on repo (including commits)
curl -u <username> https://api.github.com/repos/:owner/:repo/events
# create a new branch from the commit sha found in prev command
curl -i -u <username> -X POST -d '{"ref":"refs/heads/new-branch", "sha":"<lost-sha>"}'
https://api.github.com/repos/:owner/:repo/git/refs
第一个命令让你找到丢失的远程提交的 sha。 第二个命令允许您在该提交上创建一个分支。 然后简单地获取本地 repo 上的所有更改,新分支就会出现。 之后只需合并该分支或挑选提交并推送。
有可能!我也无法让第二部分工作。我按照@NaN 和@Sixhobbits 的建议做了,我能够恢复我的工作!谢谢!