在我的远程存储库中,我只有一个正在使用的自述文件。我在上次更新后提交了自述文件。此后,我不小心将一个文件夹从本地存储库推送到了该远程存储库,导致丢失了我正在处理的自述文件。
有什么办法可以恢复自述文件吗?
n.b。浏览了我的命令历史记录,发现我做了git push origin master --force
。我是一个初学者,我认为使用武力时出了点问题。没有力,错误是:
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
编辑:该错误看起来几乎像是发生合并冲突,但是争论的焦点在于,我的问题是在从本地推送而不拉出它之后,丢失了来自远程的提交。接受的答案解决了我的问题。
答案 0 :(得分:2)
其中涉及一些步骤,所以让我们看一下。
首先,重要的是要了解“丢失的提交”不会立即永久丢失,而是可能仍在有限的时间内驻留在磁盘上。非常重要的是,在尝试解决当前问题之前,不要进一步推送或修改有问题的存储库
此外,根据您已经对存储库执行的操作,可能为时已晚。但是,让我们假设它不是,看看是否可以找回丢失的文件。
首先,导航到有问题的GitHub存储库,就是这样(我以自己的存储库为例,请按如下所示编辑相关位):
https://github.com/lassevk/LVK
^--edit---^
然后,我们对URL进行一些编辑以获取存储库的事件日志:
https://api.github.com/repos/lassevk/LVK/events
^--edit---^
这应该给你一个json文件。在此json文件中,您需要使用浏览器中的Ctrl-F 搜索以查找有问题的文件或其内容。假设您找到它,它看起来像这样:
"commits": [
{
"sha": "a52da7697640b77f0b2e16de8d6e8ad8c29924e2",
"author": {
"email": "lasse@vkarlsen.no",
"name": "Lasse Vågsæther Karlsen"
},
"message": "Rewrite HttpClient related code.",
"distinct": false,
"url": "https://api.github.com/repos/lassevk/LVK/commits/a52da7697640b77f0b2e16de8d6e8ad8c29924e2"
在那看到SHA吗?复制并将其粘贴到以下类型的链接中:
https://github.com/lassevk/LVK/commit/a52da7697640b77f0b2e16de8d6e8ad8c29924e2
^-------------------------edit----------------------------^
如果这给您一个“ 404 not found”,那么据我所知,您很不走运。
但是,如果它打开了提交页面,那么您可以打开一个接一个地修改的文件,并将其原始内容作为文件直接下载到本地磁盘,然后可以将它们视需要集成到存储库中。
>如果您想为提交创建分支并在以后进行处理,可以使用以下URL代替:
https://github.com/lassevk/LVK/tree/a52da7697640b77f0b2e16de8d6e8ad8c29924e2
^--edit---^ ^------------------edit----------------^
这应该打开该提交的资源库浏览器,然后您可以使用分支的下拉列表创建指向该提交的新分支。分支指向提交后,它不再丢失。
例如,您然后可以在本地执行以下操作:
git fetch
git checkout master # or whichever branch this is on
git merge NAME-OF-TEMP-BRANCH
这应该将该文件合并到您的分支中。